File tree Expand file tree Collapse file tree 1 file changed +37
-0
lines changed Expand file tree Collapse file tree 1 file changed +37
-0
lines changed Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public:
3
+ int shortestSubarray(vector<int>& nums, int k) {
4
+ int n=nums.size();
5
+
6
+ // find the prefix sum of the given array nums -:
7
+ // Size is n+1 to handle subarrays starting from index 0
8
+ vector<long long>prefixSum(n+1,0);
9
+
10
+ // Calculating prefix sums
11
+ for(int i=1; i<=n; i++){
12
+ prefixSum[i]=prefixSum[i-1]+nums[i-1];
13
+ }
14
+
15
+ // Make a deque (doubly-ended queue -: which allows us to add/remove ele.s
16
+ // from both front/end side.
17
+ deque<int>candiIdx;
18
+
19
+ int len=INT_MAX;
20
+
21
+ for(int i=0; i<=n; i++){
22
+ // Remove candidates from front of deque where subarray sum meets target sum
23
+ while(!candiIdx.empty() && prefixSum[i]-prefixSum[candiIdx.front()]>=k){
24
+ len=min(len,i-candiIdx.front());
25
+ candiIdx.pop_front();
26
+ }
27
+ // Maintain monotonicity by removing indices with larger prefix sums
28
+ while(!candiIdx.empty() && prefixSum[i]<=prefixSum[candiIdx.back()]) {
29
+ candiIdx.pop_back();
30
+ }
31
+ // Add current index to candidates
32
+ candiIdx.push_back(i);
33
+ }
34
+ // Return -1 if no valid subarray found
35
+ return len == INT_MAX ? -1 : len;
36
+ }
37
+ };
You can’t perform that action at this time.
0 commit comments