一:题目
二:思路
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!!! 加油
版权声明:本文为qq_48508278原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。