一:题目
二:思路
1.用两个篮子装进两个数,后面只能装入这两个相同的数,并统计个数;如果遇到其他数,则重新开始计数,
这里的重新开始计数指的是在去除第一个篮子中所装进的数
2.滑动窗口来做
滑动窗口的起始位置为:数组的起始位置
滑动体为 统计的个数
滑动窗口的结束位置为:遇到第三种水果
三:上码
int max(int a,int b){return a > b ? a : b; }int totalFruit(vector<int>& fruits) {int j = 0;//起始位置int maxx = 0;//统计最大的个数map<int,int> m;//用于统计两种水果的数量map<int,int>:: iterator mt;for(int i = 0; i < fruits.size(); i++){m[fruits[i]] += 1;int temp = j;while(m.size() > 2){//当篮子装入水果遇到第三种水果的时候m[fruits[j]]--;if(m[fruits[j]] == 0){//这是为了淘汰前两种水果中的第一种m.erase(fruits[j]);} j++;//需要将起始指针往后移}maxx = max(maxx,i-temp);//统计前两种水果的个数}if(m.size() == 2 || m.size() == 1){//这是特殊处理水果总数为2 和 1的int sum = 0;for(mt = m.begin(); mt != m.end(); mt++){sum += mt->second;} maxx = max(maxx,sum);}return maxx;}
};
菜鸡杰又水了一篇 ,滑动窗口很nice!!! 加油