給定乙個含有 n 個正整數的陣列和乙個正整數 s ,找出該陣列中滿足其和 ≥ s 的長度最小的連續子陣列,並返回其長度。如果不存在符合條件的連續子陣列,返回 0。
示例:
輸入: s = 7, nums = [2,3,1,2,4,3]
輸出: 2
解釋: 子陣列 [4,3] 是該條件下的長度最小的連續子陣列。
第一次的想法是字首和,結果發現會超時。注意題目要求是和大於等於s,而不是等於s,字首和的思路時間複雜度是o(n
2)
o(n^2)
o(n2
),改進後的時間複雜度是o(n
logn
)o(nlogn)
o(nlog
n),但是這裡一直沒有ac,遂放棄
觀察發現輸入的陣列中,數字都是正整數,所以其實可以用滑動視窗來解決。如果當前的數字符合條件,那麼視窗縮小,如果當前數字對於這種求子陣列滿足某個條件的題目,如果陣列中有負數,那麼必須用字首和。否則用滑動視窗,能簡單很多。
class
solution
:def
minsubarraylen
(self, s:
int, nums: list[
int])-
>
int:
ifnot nums:
return
0 init_value =
len(nums)+1
min_length = init_value
prev, p =0,
1while p <=
len(nums)
: cur_sum =
sum(nums[prev: p]
)if cur_sum >= s:
min_length =
min(min_length, p - prev)
prev +=
1else
: p +=
1return min_length if min_length != init_value else
0
leetcode 209 長度最小的陣列
題目描述 給定乙個含有 n 個正整數的陣列和乙個正整數 s 找出該陣列中滿足其和 s 的長度最小的連續子陣列。如果不存在符合條件的連續子陣列,返回 0。參考 負雪明燭 class solution object def minsubarraylen self,s,nums type s int ty...
LeetCode 209 長度最小的子陣列
題目鏈結 題目描述 給定乙個含有 n 個正整數的陣列和乙個正整數 s 找出該陣列中滿足其和 s 的長度最小的連續子陣列。如果不存在符合條件的連續子陣列,返回 0。示例輸入 s 7,nums 2,3,1,2,4,3 輸出 2 解釋 子陣列 4,3 是該條件下的長度最小的連續子陣列。解決方法 兩種方法 ...
Leetcode209 長度最小的子陣列
給定乙個含有 n 個正整數的陣列和乙個正整數 s 找出該陣列中滿足其和 s 的長度最小的連續子陣列。如果不存在符合條件的連續子陣列,返回 0。示例 輸入 s 7,nums 2,3,1,2,4,3 輸出 2 解釋 子陣列 4,3 是該條件下的長度最小的連續子陣列。public intminsubarr...