LeetCode 209 長度最小的子陣列

2021-10-07 14:06:02 字數 1200 閱讀 3458

209.長度最小的子陣列

給定乙個含有 n 個正整數的陣列和乙個正整數 s ,找出該陣列中滿足其和 ≥ s 的長度最小的連續子陣列,並返回其長度。如果不存在符合條件的連續子陣列,返回 0。

示例:

輸入: s = 7, nums = [2,3,1,2,4,3]

輸出: 2

解釋: 子陣列 [4,3] 是該條件下的長度最小的連續子陣列。

如果你已經完成了o(n) 時間複雜度的解法, 請嘗試 o(n log n) 時間複雜度的解法。

定義兩個指標start,end分別表示滑動視窗的開始位置和結束位置,維護變數sum表示 nums[start] 到 nums[end] 的元素和。

**:

class

solution

end++;}

return ans ==

0x3f3f3f3f?0

: ans;}}

;

時間複雜度:o(n)。

或者我們換一種思路,通過字首和來尋找連續子陣列,建立乙個陣列用來儲存陣列中當前元素的字首和,sums[i] 表示從nums[0] 到 nums[i - 1] 的元素和。再遍歷陣列,對於每個下標i,通過二分查詢來得到下標idx,idx滿足sums[idx] - sums[i - 1] >= s,同時更新連續子陣列的最小的長度。

(ps : 由於原陣列元素為正整數,所以字首和一定是遞增的,所以我們可以使用二分查詢。)

**:

class

solution

return arr[l]

>= target ? l :-1

;}public

:int

minsubarraylen

(int s, vector<

int>

& nums)

end++;}

return ans ==

0x3f3f3f3f?0

: ans;}}

;

時間複雜度:o(nlogn)。

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...