題目:
給定一個含有 n 個正整數的數組和一個正整數 s ,找出該數組中滿足其和 ≥ s 的長度最小的連續子數組。如果不存在符合條件的連續子數組,返回 0。
進階:
如果你已經完成了O(n) 時間復雜度的解法, 請嘗試 O(n log n) 時間復雜度的解法
思路:
雙指針+滑動窗口
在一個小科技公司的面試時遇到過,當時手寫代碼寫的很長很亂,看了網上的解答后記憶深刻。
程序:
class Solution:
def minSubArrayLen(self, s: int, nums: List[int]) -> int:
length = len(nums)
if length <= 0:
return 0
if length == 1:
if nums[0] >= s:
return 1
else:
return 0
head = 0
auxiliary = 0
result = float('inf')
for tail in range(length):
auxiliary += nums[tail]
while auxiliary >= s:
result = min(result, tail - head + 1)
auxiliary -= nums[head]
head += 1
return result if result != float('inf') else 0