Re: [閒聊] 每日leetcode

作者: dont   2024-11-17 10:06:00
862. Shortest Subarray with Sum at Least K
## 思路
nums裡面有負數
所以先算prefix_sum, 用prefix差值計算subarray的和
維護一個mono-increasing的Deque記錄index
如果頭尾的prefix差值超過k就pop並更新res
## Code
```python
class Solution:
def shortestSubarray(self, nums: List[int], k: int) -> int:
prefix = [0] * (len(nums)+1)
for i in range(len(nums)):
prefix[i+1] = prefix[i] + nums[i]
res = float('inf')
queue = deque() # mono-increasing
for i in range(len(nums)+1):
while queue and prefix[queue[-1]] >= prefix[i]:
queue.pop()
while queue and prefix[i] - prefix[queue[0]] >= k:
res = min(ans, i - queue.popleft())
queue.append(i)
return res if res != float('inf') else -1
```

Links booklink

Contact Us: admin [ a t ] ucptt.com