Problem of the day
Given an array/list 'ARR' of integers and an integer ‘K’. You are supposed to return the length of the shortest subarray that has a sum greater than or equal to ‘K’. If there is no subarray with a sum greater than or equal to K, then return -1.
Note :An array ‘B’ is a subarray of an array ‘A’ if ‘B’ that can be obtained by deletion of, several elements(possibly none) from the start of ‘A’ and several elements(possibly none) from the end of ‘A’.
The first line contains a single integer ‘T’ denoting the number of test cases. The test cases follow.
The first line of each test case contains two integers separated by a single space ‘N’ and ‘K’ denoting the number of elements in the array/list, and the minimum required sum.
The second line of each test case contains ‘N’ single space-separated integers denoting the elements of the array/list.
Output Format :
For each test case, return a single integer that denotes the length of the shortest subarray with a sum greater than or equal to ‘K’.
Note :
You don’t need to print anything; It has already been taken care of. Just implement the given function.
1 <= T <= 50
2 <= N <= 10^4
1 <= K <= 10^9
-10^5 <= ARR[i] <= 10^5
Time Limit: 1 sec
2
5 12
3 6 7 4 3
4 8
7 2 5 4
2
2
In the first test case, the subarray from index 1 to index 2, i.e. {6, 7} has sum 13, which is greater than 12; hence the answer is 2.
In the second test case, the subarray from index 0 to index 1, i.e. {7, 2} has sum 9 which is greater than 8; also the subarray from index 2 to index 3, i.e. {5, 4} has sum 9 which is greater than 8; hence the answer is 2.
2
5 6
1 -4 2 2 3
5 30
3 5 6 2 9
3
-1
In the first test case, the subarray from index 2 to index 4, i.e. {2, 2, 3} has sum 7, which is greater than 6; hence the answer is 3.
In the second test case, no subarray has a sum greater than or equal to 30; hence the answer is -1.
Can you try to find the sum of all possible subarrays?
The idea is to find all the sub-arrays and calculate the sum of each sub-arrays and then take the length of the smallest subarray with a sum greater than or equal to ‘K’.
The steps are as follows:
O(N^2), where ‘N’ is the number of elements in the given array/list.
We are iterating through the given array/list and pivoting each element. There are ‘N’ elements to pivot, and for each pivot element, we will iterate till the end of the array which will take O(N) time. Thus, the overall time complexity is O(N^2).
O(1)
We are not using any extra space apart from a few variables. Thus, the overall space complexity will be O(1).