Approach :
- Used Two pointer i.e i and j
- j pointer is used to add an upcoming event and I pointer is used for removing the initial valued element if my sum goes out of range of targets.
Complexity
- Time Complexity : O(n*n)
- Space complexity: O(1)
import java.util.*;
import java.lang.*;
import java.io.*;
class Main {
// smallest subarray with sum K
public static int subArraylen(int arr[], int n, int k)
{
int sumsofar = 0;
int i=-1,j=-1,indexi=0,indexj=0;
int minlen = Integer.MAX_VALUE;
while(i<arr.length && j<arr.length) {
if(i==-1 && j==-1) {
i=0;
j=0;
}
sumsofar+=arr[j];
while(sumsofar > k) {
sumsofar-=arr[i];
i++;
}
if(sumsofar == k) {
minlen =Math.min(minlen, j-i+1);
indexi=i;
indexj=j;
}
j++;
}
return minlen;
}
public static void main(String[] args)
{
int arr[] = { 11, 22, 23, 41,12,12,32,13,23,24,24,2,1,2,2,3,4 };
int n = arr.length;
int K = 7;
int len = subArraylen(arr, n, K);
if (len == Integer.MAX_VALUE)
{
System.out.println("Subarray doesnt exits");
}
else
{
System.out.println("len ="+len + "\n");
}
}
}