解题思路:滑动窗口
创建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;}
};