大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。
题目考察的知识点
这道题目考察的知识点主要包括数组的遍历、累加和比较等基本操作,同时也需要理解题意中小猪每天都会从果树0开始采摘水果的情况。
题目解答方法的文字分析
我们的目标是找出在哪棵果树上,小猪能采摘到最多的水果。为了解决这个问题,我们可以采用如下思路:
- 初始化 currentFruits 和 maxFruits,分别用于记录当前水果数量和历史最大水果数量。初始时,currentFruits 应该为10,因为题目中给出果树0的果子数为10。
- 使用循环遍历数组 fruit,每次迭代都将当前果树的净水果数量差累加到 currentFruits 上。
- 在每次迭代后,判断 currentFruits 是否大于 maxFruits,如果是,则更新 maxFruits。
- 最终返回 maxFruits 即为小猪能够采摘到的最多水果数量。
思考过程中,让我们以示例来理解:
示例1输入:[-3, 2, 4, -1, -5]
初始 currentFruits = 10, maxFruits = 10
- 遍历到
-3
,currentFruits
变为7
,maxFruits
不变。 - 遍历到
2
,currentFruits
变为9
,maxFruits
不变。 - 遍历到
4
,currentFruits
变为13
,maxFruits
更新为13
。 - 遍历到
-1
,currentFruits
变为12
,maxFruits
不变。 - 遍历到
-5
,currentFruits
变为7
,maxFruits
不变。
返回 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; } };