Skip to content

Commit 5c8d1d7

Browse files
authored
Create 862. Shortest Subarray with Sum at Least K
1 parent 26c7d13 commit 5c8d1d7

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
//TC: O(NlogN)
2+
//SC: O(N)
3+
class Solution {
4+
public int shortestSubarray(int[] nums, int k) {
5+
int n = nums.length;
6+
long sum=0;
7+
int res=Integer.MAX_VALUE;
8+
TreeMap<Long,Integer> map = new TreeMap<>();
9+
for(int i=0;i<n;i++){
10+
if(nums[i]>=k) return 1;
11+
sum+=nums[i];
12+
if(sum>=k){
13+
res = Math.min(res,i+1);
14+
}
15+
long v = sum-k;
16+
Map.Entry<Long,Integer> key = map.floorEntry(v);
17+
while(key!=null){
18+
int in = key.getValue();
19+
res = Math.min(res,i-in);
20+
map.remove(key.getKey());
21+
key = map.floorEntry(key.getKey()-1);
22+
}
23+
map.put(sum,i);
24+
}
25+
return res==Integer.MAX_VALUE?-1:res;
26+
}
27+
}
28+
29+
//TC: O(N)
30+
//SC: O(N)
31+
class Solution {
32+
public int shortestSubarray(int[] nums, int k) {
33+
int n = nums.length;
34+
int res=Integer.MAX_VALUE;
35+
long[] prefix = new long[n+1];
36+
for(int i=0;i<n;i++){
37+
prefix[i+1] = prefix[i] + nums[i];
38+
}
39+
Deque<Integer> dq = new ArrayDeque<>();
40+
for(int i=0;i<n+1;i++){
41+
while(!dq.isEmpty() && (prefix[i]-prefix[dq.peekFirst()]) >= k){
42+
res = Math.min(res,i-dq.pollFirst());
43+
}
44+
while(!dq.isEmpty() && prefix[i]<=prefix[dq.peekLast()]){
45+
dq.pollLast();
46+
}
47+
dq.add(i);
48+
}
49+
return res==Integer.MAX_VALUE?-1:res;
50+
}
51+
}

0 commit comments

Comments
 (0)