水果成篮 - C++力扣904题
题目链接:https://leetcode.com/problems/fruit-into-baskets/description/
解题思路
这题其实也是一个类似于滑动窗口的问题,但是其实还是模拟一边就能过,难度算是中等偏下吧,没什么太大的难点。
首先我们先弄一个哈希表,然后每次遍历的时候都检查是否为新的树,如果是的话那我们就从左边开始向前,每次向前都在哈希表里面 -1,直到某个树的水果为 0,然后再将新的果树的水果记录下来。如果不是新的果树那就不断 +1 就行了。然后最后取左边到右边的距离的最大值。
完整代码:
class Solution {
public:
int totalFruit(vector<int>& fruits) {
int ans = 0, i = 0, j = 0;
unordered_map<int, int> map;
while(j < fruits.size()) {
map[fruits[j]]++;
while(map.size() > 2) {
map[fruits[i]]--;
if(map[fruits[i]] == 0) map.erase(fruits[i]);
i++;
}
ans = max(ans, j - i + 1);
j++;
}
return ans;
}
};
版权属于:江筱雨
本文链接:https://www.yuisblog.com/archives/231/
本站未注明转载的文章均为原创,并采用
CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!