Smallest subarray with sum greater than x

Given an array of integers (A[])  and a number x, find the smallest subarray with sum greater than the given value.

Note: The answer always exists. It is guaranteed that x doesn't exceed the summation of a[i] (from 1 to N).

Example 1:

A[] = {1, 4, 45, 6, 0, 19}
x  =  51
Output: 3
Minimum length subarray is 
{4, 45, 6}

Example 2:
A[] = {1, 10, 5, 2, 7}
   x  = 9
Output: 1
Minimum length subarray is {10}


method: sliding window

  • Maintain l and r index to store and print these values 
  • Iterate the complete array.
  • Add array elements to current sum (int c)
  • If current sum becomes greater than x, check the length of the subarray(int mi) and if it is min found till now update it,and even  subtract a[l] from subarray and increment l
  • if current sum is less than x, then add a[r] to the subarray and increment r
  • return the min length of the subarray

c++ implementation:

   int sb(int a[], int n, int x)
{ int l=0;int r=0;int c=0;int mi=INT_MAX; while(r<=n) { if(c>x) { if(mi>r-l) mi=r-l; c=c-a[l]; l++; } else { c=c+a[r]; r++; } } return mi; }
Time Complexity: O(n) 
space Complexity: O(1)