Shortest Subarray with Sum at Least K
Return the length of the shortest, non-empty, contiguous subarray of A
with sum at least K
.
If there is no non-empty subarray with sum at least K
, return -1
.
Example 1:
Input: A = [1], K = 1
Output: 1
Example 2:
Input: A = [1,2], K = 4
Output: -1
Example 3:
Input: A = [2,-1,2], K = 3
Output: 3
Note:
1 <= A.length <= 50000
-10 ^ 5 <= A[i] <= 10 ^ 5
1 <= K <= 10 ^ 9
分析
单调递增栈。 找左边比右边小的,左边i比右边j大的无用,
class Solution:
def shortestSubarray(self, A: List[int], K: int) -> int:
B = [0]
for i in A:
B.append(B[-1]+i)
s = []
res = float('inf')
for i,b in enumerate(B):
if not s:
s.append(i)
else:
while s and B[s[-1]] > b: s.pop() #useless, pop out
while s and B[s[0]] <= b - K:
res = min(res,i - s[0])
s.pop(0)
s.append(i)
return res if res!= float('inf') else -1
Last updated
Was this helpful?