題目:
分析:
要找到連續子陣列的和大於指定值,以每個陣列元素為子陣列的開始元素,找到其和大於等於指定值的陣列就停止,並記錄其長度。
步驟:
計算陣列的長度;定義乙個變數用於表示連續子陣列的累加和;定義乙個變數用於儲存每個子連續陣列的個數;定義乙個變數,用於儲存最少的子連續陣列的個數,開始值設為最大
從頭開始遍歷陣列元素,直到所有元素遍歷結束
從訪問的陣列元素開始做累加,直到其和大於或等於目標值停止,記錄此次子陣列的長度;如果比原來的小,儲存最少的子連續陣列的個數的變數重新整理,並且累加和設為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...