給定乙個含有 n 個正整數的陣列和乙個正整數 target 。
找出該陣列中滿足其和 ≥ target 的長度最小的連續子陣列 [numsl, numsl+1, ..., numsr-1, numsr] ,並返回其長度。如果不存在符合條件的子陣列,返回 0 。
示例 1:
輸入:target = 7, nums = [2,3,1,2,4,3]
輸出:2
解釋:子陣列 [4,3] 是該條件下的長度最小的子陣列。
示例 2:
輸入:target = 4, nums = [1,4,4]
輸出:1
示例 3:
輸入:target = 11, nums = [1,1,1,1,1,1,1,1]
輸出:0
陣列操作中乙個重要的方法:滑動視窗。
所謂滑動視窗,也可以理解為雙指標法的一種,通過不斷的調節子串行的起始位置和終止位置,從而得出我們要想的結果。
主要確定如下三點:
如何移動視窗的起始位置?
如何移動視窗的結束位置?
class solution:
def minsubarraylen(self, target: int, nums: list[int]) -> int:
result = len(nums) + 1
sum = 0 # 滑動視窗數值之和
i = 0 # 滑動視窗起始位置
sublength = 0 # 滑動視窗的長度
for j in range(len(nums)):
sum = sum + nums[j]
# 注意這裡使用while,每次更新 i(起始位置),並不斷比較子串行是否符合條件
while sum >= target:
sublength = (j - i + 1) # 取子串行的長度
result = result if result < sublength else sublength
sum -= nums[i] # 這裡體現出滑動視窗的精髓之處,不斷變更i(子串行的起始位置)
i = i + 1
# 如果result沒有被賦值的話,就返回0,說明沒有符合條件的子串行
return (0 if result == (len(nums) + 1) else result)
時間複雜度:o(n)
空間複雜度:o(1)
陣列 滑動視窗
滑動視窗大多用於處理連續子陣列問題,然後得到相應的長度。例題 長度最小的子陣列 給定乙個含有 n 個正整數的陣列和乙個正整數 s 找出該陣列中滿足其和 s 的長度最小的連續子陣列。如果不存在符合條件的連續子陣列,返回 0。思路 使用滑動視窗i在左邊,j在右邊,明確意義 i,j 為滑動視窗 閉區間 如...
陣列 滑動視窗
leetcode 209.長度最小的子陣列 給定乙個含有 n 個正整數的陣列和乙個正整數 s 找出該陣列中滿足其和 s 的長度最小的 連續 子陣列,並返回其長度。如果不存在符合條件的子陣列,返回 0。示例 輸入 s 7,nums 2,3,1,2,4,3 輸出 2 解釋 子陣列 4,3 是該條件下的長...
陣列 滑動視窗
leetcode 209.長度最小的子陣列 給定乙個含有 n 個正整數的陣列和乙個正整數 s 找出該陣列中滿足其和 s 的長度最小的 連續 子陣列,並返回其長度。如果不存在符合條件的子陣列,返回 0。示例 輸入 s 7,nums 2,3,1,2,4,3 輸出 2 解釋 子陣列 4,3 是該條件下的長...