解题思路:滑动窗口
创建hash表记录水果的种类和数量
两个指针left 和 right 从数组起始位置开始滑动,right在循环内++
hash[fruits[right]]++ 进窗口
然后判断 hash表中的种类是否大于2
一旦大于2就要想办法出窗口 出窗口需要将hash表中种类重回2种 这时候就要动用left指针
然后更新结果
代码如下
class Solution {
public:
int totalFruit(vector<int>& fruits)
{
unordered_map<int,int> hash;//前面存种类 ,后面存数量
int ret=0;
for(int left=0,right=0 ;right<fruits.size();right++)
{
hash[fruits[right]]++;//进窗口
while(hash.size()>2)
{
hash[fruits[left]]--;
if(hash[fruits[left]]==0)//出窗口
{
hash.erase(fruits[left]);
}
left++;
}
ret=max(ret,right-left+1);
}
return ret;
}
};