給定乙個含有 n 個正整數的陣列和乙個正整數 target 。
找出該陣列中滿足其和 ≥ target 的長度最小的 連續子陣列 [numsl, numsl+1, ..., numsr-1, numsr] ,並返回其長度。如果不存在符合條件的子陣列,返回 0 。
原題請參考鏈結
方法一 【暴力破解】
# 此方法會存在超時,在這裡只是作為一種方法提供
class solution:
def minsubarraylen(self, target: int, nums: list[int]) -> int:
if not nums:
return 0
l = len(nums)
ans = l + 1
for i in range(l):
total = 0
for j in range(i,l):
total += nums[j]
if total >= target:
ans = min(ans,j-i+1)
break
return 0 if ans==l+1 else ans
方法二 【雙指標(滑動視窗)】# 如用滑動視窗實現,必須確定如下三點:
# 1.視窗內是什麼
# 2.如何移動視窗的起始位置
# 3.如何移動視窗的結束位置
# 解答
# 1.視窗就是 滿足其和 ≥ s的長度最小的連續子陣列。
# 2.視窗的起始位置為陣列的起始位置,如果當前視窗的值大於s,視窗就要向前移動,等價於縮小視窗的值
# 3.視窗的結束位置為陣列的最大長度-1,如果當前視窗的值小於s,視窗就要向前移動,等回家與擴大視窗的值
class solution:
def minsubarraylen(self, target: int, nums: list[int]) -> int:
if not nums:
return 0
l = len(nums)
total = 0
ans = l + 1
start,end = 0,0
while end < l:
total += nums[end]
while total >= target:
ans = min(end-start+1,ans)
total -= nums[start]
start += 1
end += 1
return 0 if ans==l+1 else ans
209 長度最小的子陣列
給定乙個含有 n 個正整數的陣列和乙個正整數 s 找出該陣列中滿足其和 s 的長度最小的連續子陣列。如果不存在符合條件的連續子陣列,返回 0。示例 輸入 s 7,nums 2,3,1,2,4,3 輸出 2 解釋 子陣列 4,3 是該條件下的長度最小的連續子陣列。高階 如果你已經完成了o n 時間複雜...
209 長度最小的子陣列
給定乙個含有 n 個正整數的陣列和乙個正整數 s 找出該陣列中滿足其和 s 的長度最小的連續子陣列。如果不存在符合條件的連續子陣列,返回 0。示例 輸入 s 7,nums 2,3,1,2,4,3 輸出 2 解釋 子陣列 4,3 是該條件下的長度最小的連續子陣列。高階 如果你已經完成了o n 時間複雜...
209 長度最小的子陣列
給定乙個含有 n 個正整數的陣列和乙個正整數 s 找出該陣列中滿足其和 s 的長度最小的連續子陣列。如果不存在符合條件的連續子陣列,返回 0。示例 輸入 s 7,nums 2,3,1,2,4,3 輸出 2 解釋 子陣列 4,3 是該條件下的長度最小的連續子陣列。高階 如果你已經完成了o n 時間複雜...