904. 水果成篮

这段代码定义了一个名为totalFruit的方法,用于在一个整数数组中找到最多能收集的不同种类的连续水果。方法通过遍历数组,维护三种水果种类和最大数量,关键在于更新thirdBefore。
摘要由CSDN通过智能技术生成
class Solution {
    public static int totalFruit(int[] fruits) {
        int left = 0, right = 0;
        int firstSort = -1, secondSort = -1; //两种水果种类
        int maxCount = 0; // 可以收集的最大数目
        int thirdBefore = 0; // thirdBefore指向第三种果树的前一种果树的第一棵
                            //[3, 1, 1, 1, 3, 1, 1, 1, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2]
                            //比如说第二轮就是从第一个2前面的三个1里面的第一个1开始

        firstSort = fruits[left]; //第一个水果就是第一种水果
        for (right = 0; right < fruits.length; right++) {
            //第一次找到第二种水果
            if (fruits[right] != firstSort && secondSort == -1) {
                secondSort = fruits[right]; //将第二种水果的值赋值给第二个种类
            }
            //找到了第一种水果或者第二种水果
            if (fruits[right] == firstSort || fruits[right] == secondSort) {
                maxCount = right - left + 1 > maxCount ? right - left + 1 : maxCount; //更新收集的最大数目
            } else {
                //找到了第三种水果,开始下一轮:从第三种果树的前一种果树的第一棵开始遍历
                left = thirdBefore; // 移动慢指针
                firstSort = fruits[left];
                secondSort = fruits[right];
            }
            // 前面两种水果每换一次种类,就更新一下thirdBefore,thirdBefore指向第三种果树的前一种果树的第一棵
            if (right > 0 && fruits[right] != fruits[right - 1]) {
                thirdBefore = right;
            }
        }
        return maxCount;
    }
}

//重点就是如何更新thirdBefore(指向第三种果树的前一种果树的第一棵)
//前面两种水果每换一次种类,就更新一下thirdBefore

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值