大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。

题目考察的知识点

这道题目考察的知识点主要包括数组的遍历、累加和比较等基本操作,同时也需要理解题意中小猪每天都会从果树0开始采摘水果的情况。

题目解答方法的文字分析

我们的目标是找出在哪棵果树上,小猪能采摘到最多的水果。为了解决这个问题,我们可以采用如下思路:

  1. 初始化 currentFruits 和 maxFruits,分别用于记录当前水果数量和历史最大水果数量。初始时,currentFruits 应该为10,因为题目中给出果树0的果子数为10。
  2. 使用循环遍历数组 fruit,每次迭代都将当前果树的净水果数量差累加到 currentFruits 上。
  3. 在每次迭代后,判断 currentFruits 是否大于 maxFruits,如果是,则更新 maxFruits。
  4. 最终返回 maxFruits 即为小猪能够采摘到的最多水果数量。

思考过程中,让我们以示例来理解:

示例1输入:[-3, 2, 4, -1, -5]初始 currentFruits = 10, maxFruits = 10

  • 遍历到 -3currentFruits 变为 7maxFruits 不变。
  • 遍历到 2currentFruits 变为 9maxFruits 不变。
  • 遍历到 4currentFruits 变为 13maxFruits 更新为 13
  • 遍历到 -1currentFruits 变为 12maxFruits 不变。
  • 遍历到 -5currentFruits 变为 7maxFruits 不变。

返回 maxFruits,得到结果 13,即小猪能够采摘到的最多水果数量。

本题解析所用的编程语言 (C++)

本题解析使用 C++ 进行编程。

完整且正确的编程代码

class Solution {
public:
    int mostFruitTree(vector<int>& fruit) {
        int currentFruits = 10; // 初始值为10
        int maxFruits = currentFruits; // 初始的最大水果数量就是初始值
        
        for (int i = 0; i < fruit.size(); ++i) {
            currentFruits += fruit[i]; // 将当前果树的净水果数量差累加到当前水果数量上
            
            if (currentFruits > maxFruits) {
                maxFruits = currentFruits; // 更新最多水果数量
            }
        }
        
        return maxFruits;
    }
};

您的关注、点赞、收藏就是我创作的动力,三连支持阿Q!