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