繁花落尽,我心中仍有花落的声音。一朵,一朵,在无人的山间轻轻飘落。
前言
这是我自己学习蓝桥杯算法的第二篇博客总结。
上一期笔记是关于C++的双指针算法,没看的同学可以过去看看:
【C++】双指针算法-CSDN博客
https://blog.csdn.net/hsy1603914691/article/details/145965695?sharetype=blogdetail&sharerId=145965695&sharerefer=PC&sharesource=hsy1603914691&spm=1011.2480.3001.8118
技巧
1. 滑动窗口算法的本质是双指针算法+单调性。一个单向快慢双指针,那么快指针到慢指针之间形成的区间就像一个窗口,随着快慢指针不断的移动,这个区间就如一个滑动的窗口。
2. right指针,进窗口指针,直到right指针移出窗口,循环才结束。
3. left指针,出窗口指针,当right指针移动到满足情况时,left指针开始移动,直到不再满足情况。
4. [left,right]这段区间就是一个窗口,随着指针的移动而滑动。
5. 滑动窗口算法的时间复杂度是O=(n)。
例题
1. leetcode-209题:
209. 长度最小的子数组 - 力扣(LeetCode)
https://leetcode.cn/problems/minimum-size-subarray-sum/submissions/609114471/
class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int sum=0,len=INT_MAX;int left=0,right=0;while(right<nums.size()){sum+=nums[right];while(sum>=target){len=min(len,(right-left+1));sum-=nums[left];left++;}right++;}if(len==INT_MAX)return 0;elsereturn len;}
};