首页 > 其他分享 >滑动窗口总结

滑动窗口总结

时间:2024-06-17 11:30:03浏览次数:38  
标签:总结 窗口 int 循环 result 数组 滑动 最长

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int i=0;
        int sum=0;
        int result=INT32_MAX;
        for(int j=0;j<nums.size();j++){
            sum+=nums[j];
            while(sum>=target){
                result=min(result,j-i+1);
                sum-=nums[i++];
            }
        }
        return result==INT32_MAX?0:result;
    }
};
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int left=0;
        int result=0;
        unordered_set<char>window;
        for(int right=0;right<s.length();right++){
            char c=s[right];
            while(window.count(c)){
                window.erase(s[left++]);
            }
            window.insert(c);
            result=max(result,right-left+1);
        }
        return result;
    }
};

我们可以对比一下这两道滑动窗口的题目,第一道是力扣209题,求长度最小的子数组,第二道是力扣3题,无重复字符的最长子串。都是滑动窗口中求不定长的最长、最短型。(还有别的类型,主要是还没刷到,下次二刷的时候刷灵神的题单时补充)

主要的思路如下:

        1.设置两个指针,一个指向初始元素,一个指向终止元素(这个一般在for循环中设置)。一般可以再多设置一个变量,用来记录最后最长、最短的长度。

        2.利用for循环遍历整个数组,字符串可以当做数组遍历。

        3.利用while循环,不断更改result的值,result通常需要和终止位置与起始位置之间的距离做比较。

注意事项:

        1.有时候可能会需要用到哈希表之类的,思路不一定完全一致

        2.一定要用while循环去判断符合条件的最长、最短数组长度,不能用if。

        3.result的初始值设置也是一个坑点,需要考虑临界的情况(即可能数组中没有的时候应该返回的值)

标签:总结,窗口,int,循环,result,数组,滑动,最长
From: https://blog.csdn.net/2301_80161204/article/details/139738835

相关文章