zl程序教程

您现在的位置是:首页 >  其他

当前栏目

力扣904 水果成篮

2023-04-18 15:40:51 时间

水果成篮:

按顺序取,问连续最多的两个数有几个。

总体思路:

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;
    }
};