本內(nèi)容是筆者結(jié)合《代碼隨想錄》總結(jié)所得,記錄學(xué)習(xí)過程,分享知識!
目錄:
1. 開篇例題:209. 長度最小的子數(shù)組
2. 題解參考- - 2.1 方法一:暴力法
- - 2.2 方法二:滑動窗口3. 方法思路點(diǎn)撥:滑動窗口
- - 3.1 直白解釋
- - 3.2 本題思路點(diǎn)撥4. 相關(guān)題集
1. 開篇例題:209. 長度最小的子數(shù)組
例題:點(diǎn)擊直飛
2. 題解參考
2.1 方法一:暴力法
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
// 雙循環(huán)暴力法
int sum = 0;
int res = INT32_MAX;
int len = 0;
for(int i = 0;i<nums.size();i++){ // 設(shè)置子數(shù)組起始點(diǎn)
sum = 0;
for(int j = i;j<nums.size();j++){ // 探索子數(shù)組終點(diǎn)
sum += nums[j];
if(sum >= target){
len = j-i+1; // 子列長度
res = res > len?len:res;
break;
}
}
}
return res == INT32_MAX? 0:res;
}
};
2.2 方法二:滑動窗口
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
// 滑動窗口
int res = INT32_MAX;
int len = 0; // 子數(shù)列長度
int i =0; // 子列起始位
int sum = 0;
for(int j = 0; j<nums.size() ;j++){
sum += nums[j];
while(sum >= target){ // 核心代碼
len = j-i+1; // 獲取合法子數(shù)列長度
res = res > len ? len : res;
sum -= nums[i++];
// 子列起始位長度調(diào)整,改寫法規(guī)避了可能單次移動遇到負(fù)數(shù)引起的重復(fù)操作!
}
}
return res == INT32_MAX?0:res;
}
};
3. 方法思路點(diǎn)撥:滑動窗口
3.1 雙指針?biāo)惴☉?yīng)用:滑動窗口
滑動窗口的思路即:使用兩個(gè)指針維護(hù)一個(gè)區(qū)間【通常是左閉右閉區(qū)間】,這區(qū)間具有可變性,類似與二分法中的邊界重定向,使得區(qū)間減小。
但此處的滑動窗口顯然高級:可變大、可變??!【窗口大小依據(jù)問題情景而定】(如下圖)
3.2 本題思路點(diǎn)撥
依據(jù)題設(shè),我們需要找到一個(gè)區(qū)間,該區(qū)間內(nèi)的元素之和滿足不小于指定值。同時(shí)需要滿足:找到的區(qū)間是最小的。
此題即可使用滑動窗口去探索最小區(qū)間!文章來源:http://www.zghlxwxcb.cn/news/detail-442205.html
4. 相關(guān)題集
待選中文章來源地址http://www.zghlxwxcb.cn/news/detail-442205.html
到了這里,關(guān)于算法刷題營【Day2】:: 雙指針?biāo)惴☉?yīng)用:滑動窗口 :209. 長度最小的子數(shù)組的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!