dapaogege

导航

 

滑动窗口 (Sliding Window) 是解决数组/字符串问题的神器,它能把 $O(N^2)$ 的暴力解法优化到 $O(N)$。核心思想想象一条毛毛虫在数组上爬行。右边界 (right) 向前伸,吞掉新元素。左边界 (left) 向前收缩,吐出旧元素(当条件不满足时)。

lecode 209

class Solution {
public:
int minSubArrayLen(int target, vector& nums) {
int sum=0;
int left=0;
int result=INT_MAX;
for(int right=0;right<nums.size();right++){

        sum+=nums[right];
        while(sum>=target){                                //注意更新时间
            result=min(result,right-left+1);               //不要在while外修改
            sum-=nums[left];
            left++;
            
        }
        
    }
    return result==INT_MAX?0:result;
}

};
下面是经典错误
class Solution {
public:
int minSubArrayLen(int target, vector& nums) {
int sum = 0;
int left = 0;
int result = INT_MAX;

    for (int right = 0; right < nums.size(); right++) {
        sum += nums[right];
        
        while (sum > target) { 
            sum -= nums[left];
            left++;
        }

        result = min(result, right - left + 1);      // 错误的更新位置
    }

    return result == INT_MAX ? 0 : result;
}

};

lecode 3
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int left=0;
int result=0;
if(s.empty()){
return 0;
}
std::unordered_set se;
for(int right=0;right<s.size();right++){
while(se.find(s[right])!=se.end()){

            se.erase(s[left]);
            left++;
        }
        se.insert(s[right]);
        result=max(result,right-left+1);
    }
    return result;
}

};

posted on 2025-12-08 20:39  dapaogege  阅读(0)  评论(0)    收藏  举报