leetcode 209 長度最小的子陣列

2021-10-07 13:45:14 字數 1110 閱讀 2069

給定乙個含有 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...