1. 题目链接
2. 解题方法
- 题目的意思是说,有一个篮子,只能装2种水果,求出装2种水果的最大数量。
- 那么题目就可以简化为固定窗口的滑动窗口问题。
- 进窗口。
- 判断水果种类是否超过2种,超过两种,出窗口,没有超过两种,继续进窗口。
- 出窗口后,更新最大值。
3. 代码
class Solution {
public:
int totalFruit(vector<int>& fruits)
{
int res = 0, n = fruits.size();
unordered_map<int, int> hash;
for(int l = 0, r = 0; r < n; r++)
{
// 进窗口
hash[fruits[r]]++;
// 判断水果种类是否大于2种
while(l <= r && hash.size() > 2)
{
hash[fruits[l]]--;
if(hash[fruits[l]] == 0) hash.erase(fruits[l]);
// 出窗口
l++;
}
// 更新最大值
res = max(res, r - l + 1);
}
return res;
}
};