209 長度最小的子陣列

2022-06-15 14:06:08 字數 1323 閱讀 3636

給定乙個含有 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 時間複雜...