题解 | #相等的草堆#
相等的草堆
https://www.nowcoder.com/practice/0e2f3b27bbdc45fcbc70cc4fd41e15fe
大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。
题目考察的知识点
这道题目考察的是在数组中找到一个索引,使得索引左边的元素和等于索引右边的元素和。
题目解答方法的文字分析
给定一个长度为 n 的整数数组 grass
,表示每个草堆的重量。
我们的任务是找到一个草堆位置,使得该位置的左边草堆的总重量等于右边草堆的总重量。
具体步骤如下:
- 初始化变量
totalSum
为数组所有元素的总和。 - 初始化变量
leftSum
为 0,表示左边草堆的总重量。 - 遍历数组
grass
,对于每个草堆重量grass[i]
,比较左边草堆总重量leftSum
和右边草堆总重量totalSum - leftSum - grass[i]
是否相等。如果相等,返回当前草堆位置i
。 - 更新左边草堆总重量
leftSum
为leftSum + grass[i]
。 - 如果没有找到符合条件的草堆位置,返回 -1。
本题解析所用的编程语言 (C++)
本题解析所用的编程语言是 C++。
完整且正确的编程代码
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int pivotIndex(vector<int>& nums) { int totalSum = 0; // 数组所有元素的总和 for (int num : nums) { totalSum += num; } int leftSum = 0; // 左边草堆的总重量 for (int i = 0; i < nums.size(); i++) { if (leftSum == totalSum - leftSum - nums[i]) { return i; // 找到符合条件的草堆位置 } leftSum += nums[i]; // 更新左边草堆总重量 } return -1; // 没有找到符合条件的草堆位置 } };
阿Q的题解 文章被收录于专栏
阿Q秋招刷过的题