leetcode 209 長度最小的子陣列

2021-10-10 12:42:05 字數 1448 閱讀 9085

題目:

分析:

要找到連續子陣列的和大於指定值,以每個陣列元素為子陣列的開始元素,找到其和大於等於指定值的陣列就停止,並記錄其長度。

步驟:

計算陣列的長度;定義乙個變數用於表示連續子陣列的累加和;定義乙個變數用於儲存每個子連續陣列的個數;定義乙個變數,用於儲存最少的子連續陣列的個數,開始值設為最大

從頭開始遍歷陣列元素,直到所有元素遍歷結束

從訪問的陣列元素開始做累加,直到其和大於或等於目標值停止,記錄此次子陣列的長度;如果比原來的小,儲存最少的子連續陣列的個數的變數重新整理,並且累加和設為0(注意:子連續陣列的開頭元素沒重新整理一次,累加和就要清0一次)

如果,儲存最少的子連續陣列的個數的變數沒有重新整理,依然是最大值,則就說明不存在這樣的子連續陣列,返回0;否則,就將最少子連續陣列的個數

int

minsubarraylen

(int s, vector<

int>

& nums)

} sum=0;

//重新整理的位置

if(result>size)}if

(result == int_max)

return result;

}

思路二:滑動視窗法(動態的滑動視窗)

分析:

滑動視窗就是不斷地調整子串行的起始位置和終止位置,從而得到我們所要的結果。

實現滑動視窗,主要確定如下三點:

在本題中,視窗就是滿足其和》=s的長度最小的連續子陣列,

視窗的起始位置 如何移動?當當前視窗的值大於時,視窗就前移, 如何移動視窗的結束位置?視窗結束的位置就是遍歷陣列的指標,當其和小於s時,就向後移動視窗的結束位置

步驟:

計算陣列的長度;定義乙個變數用於表示連續子陣列的累加和;定義乙個變數用於存當前視窗的長度;定義乙個變數,用於

儲存最少的子連續陣列的個數,開始值設為最大;定義乙個 變 量,用於記錄敞口的起始位置

視窗的結束位置遍歷陣列元素,

視窗的數值做累加,當視窗的大於等於時,計算當前視窗的長度,和之前視窗的長度作比較,記下最小的,然後滑動視窗的起始位 置前移

判斷滑動視窗有沒有被賦值,沒有就返回0,否則就返回視窗的長度

int

minsubarraylen

(int s, vector<

int>

& nums)

} result = result == int_max ?

0: result;

return result;

}

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