滑动窗口
leetcode904:水果成篮
class solution{
public:
int totalfruit(vector<int>&fruits){
int s = 0, ans = 0;
unordered_map<int,int>cnt;//记录窗口中水果种类与出现的次数;
for(int left = 0, right = 0; right < fruits.size(); right++){
if(++cnt[fruits[right]] == 1)//==1代表新水果,只要出现新说水果,记录数目的s就++
s++;
while(s > 2)//当超过两个时,需要进行循环删除,从左边缩小窗口的范围,缩小到窗口中
{ //只有两种新水果为止;
if(--cnt[fruits[left]] == 0)//如果某种水果被删除完毕,数量s--
s--;
left++;//水果个数先减少,再left++。否则会减少到别的水果身上或者少减少一次;
}
ans = max(ans, right - left + 1);//取ans和现在窗口范围的最大值;
}
return ans;
}
};
文章介绍了如何使用滑动窗口算法解决LeetCode题目904——水果成篮问题,通过维护一个unordered_map记录水果种类和出现次数,当种类数量超过2时,逐步缩小窗口直到种类数量恢复到2,更新答案为当前窗口范围的最大值。
2343

被折叠的 条评论
为什么被折叠?



