用C ++将水果放入篮子
假设我们有一排树,第i棵树产生的树的类型为tree[i]。我们可以从我们选择的任何树开始,然后重复执行这些步骤-
从这棵树上添加一块水果到我们的篮子里。如果没有机会,请停止。
移至当前树右侧的下一棵树。如果右边没有树,请停止。
我们有两个篮子,每个篮子可以装任何数量的水果,但是我们希望每个篮子只能装一种水果。我们必须找到可以通过此程序收集的水果总量吗?因此,如果树是[0,1,2,2],则输出将为3。我们可以收集[1,2,2],如果我们从第一棵树开始,那么我们只会收集[0,1,1]
为了解决这个问题,我们将遵循以下步骤-
n:=树大小,j:=0,ans:=0
创建一张映射
对于i,范围为0至n–1
将m[tree[j]]减少1
如果m[tree[j]]=0,则从m中删除tree[j]
将j增加1
将m[tree[i]]增加1
当m的大小>2且j<=i时,则
ans:=i–j+1和ans的最大值
返回ans
让我们看下面的实现以更好地理解-
示例
#include <bits/stdc++.h> using namespace std; class Solution { public: int totalFruit(vector<int>& tree) { int n = tree.size(); int j = 0; map <int, int> m; int ans = 0; for(int i = 0; i < n; i++){ m[tree[i]] += 1; while(m.size() > 2 && j <= i){ m[tree[j]]--; if(m[tree[j]] == 0)m.erase(tree[j]); j++; } ans = max(i - j + 1, ans); } return ans; } }; main(){ vector<int> v = {3,3,3,1,2,1,1,2,3,3,4}; Solution ob; cout <<(ob.totalFruit(v)); }
输入项
[3,3,3,1,2,1,1,2,3,3,4]
输出结果
5