leetcode209. 长度最小的子数组(暴力+滑动窗口)
生活随笔
收集整理的這篇文章主要介紹了
leetcode209. 长度最小的子数组(暴力+滑动窗口)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一:題目
二:暴力+滑動窗口
1:暴力解法
class Solution { public:int min (int a ,int b){return a < b ? a : b;}int minSubArrayLen(int target, vector<int>& nums) {int minx = 100001;for(int i = 0; i < nums.size(); i++){vector<int> v;int sum = nums[i];v.push_back(nums[i]);for(int j = i + 1; j < nums.size(); j++){if(sum < target){sum += nums[j];v.push_back(nums[j]);}else{break;//當已經找到超過target的序列的時候 就可以跳出循環}}if(sum >= target)minx = min(minx,v.size());}if(minx == 100001)return 0;else return minx;} };2:滑動窗口
(1):思路
思路:
1.滑動窗口方法,類似與雙指針
2.先介紹滑動窗口的三要素
滑動窗口的起始位置,
窗口的范圍大小
窗口的結束位置
3.在本題中,我們的起始位置是數組的開頭,窗口的范圍大小是我們累加的和,結束位置是我們的累加和大于target 的元素位置.
4.那么滑動窗口的精髓之處在于移動起始位置的指針,當我們統計到一個滿足target的時候,我們將sum 剪去 nums[i++] (i是起始位置) ,那么就相當于我們向后移動一個元素
(2):上碼
class Solution { public:int min (int a ,int b){return a < b ? a : b;}int minSubArrayLen(int target, vector<int>& nums) {/**思路:1.滑動窗口方法,類似與雙指針2.先介紹滑動窗口的三要素滑動窗口的起始位置,窗口的范圍大小窗口的結束位置3.在本題中,我們的起始位置是數組的開頭,窗口的范圍大小是我們累加的和,結束位置是我們的累加和大于target 的元素位置.4.那么滑動窗口的精髓之處在于移動起始位置的指針,當我們統計到一個滿足target的時候,我們將sum 剪去 nums[i++] (i是起始位置) ,那么就相當于我們向后移動一個元素**/int minx = 100001;int arraylength = 0;//滑動窗口的長度int sum = 0;//窗口的大小int j = 0;//滑動窗口的起始 位置for(int i = 0; i < nums.size(); i++) {sum += nums[i];while(sum >= target){arraylength = i - j + 1;//這個可以拿例子理解minx = min(minx,arraylength);sum -= nums[j++];//這里體現滑動窗口的精髓之處 我們可以獲知這里是移動出窗口的起始位置}}return minx == 100001 ? 0 : minx;} };不用猜 暴力解法 一定是菜雞杰的解法 哈哈哈 菜雞杰也只會暴力解決一切 但該學習學習還是得學 一看評論區 臥槽 還能這么做 我真菜 菜雞杰果然是菜雞 哈哈哈 加油 各位 !!
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的leetcode209. 长度最小的子数组(暴力+滑动窗口)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode977. 有序数组的平方
- 下一篇: CTF MICS笔记总结