水果成篮:
按顺序取,问连续最多的两个数有几个。
总体思路:
1、如果是我们要的数,直接数量加一;
2、如果是新的数,那么j-1的位置的数就是第一个数,j位置的数就是第二个数。并且要更新j-1上数的数量,计算j-1 到 “碰到要丢弃的那个数” 的数量。
举例:
2 1 2 2 2 3 3 3
当取到3时,要把3看成新的数,把前面连续的2都取了。最终答案为 2 2 2 3 3 3.
class Solution { public: int totalFruit(vector<int>& fruits) { int i,j,k; int a[2]; int num[2]; int ans=0; int len=fruits.size(); a[0]=fruits[0]; num[0]=1; a[1]=-1; num[1]=0; for(j=1;j<len;j++){ if(fruits[j]==a[0]) num[0]++; if(fruits[j]==a[1]) num[1]++; if(fruits[j]!=a[0]&&a[1]==-1) { num[1]=1; a[1]=fruits[j]; } if(fruits[j]!=a[0]&&fruits[j]!=a[1]){ ans=max(ans,num[0]+num[1]); a[0]=fruits[j-1]; a[1]=fruits[j]; num[0]=1; num[1]=1; for(int k=j-2;;k--){ if(fruits[k]==a[0]) num[0]++; else break; } } ans=max(ans,num[0]+num[1]); } ans=max(ans,num[0]+num[1]); return ans; } };
标签:904,int,力扣,num,fruits,成篮 From: https://www.cnblogs.com/bhd123/p/17214714.html