题解 | #相等的草堆#
相等的草堆
https://www.nowcoder.com/practice/0e2f3b27bbdc45fcbc70cc4fd41e15fe
考察知识点:数组,遍历
解题分析: 首先应该数组分为两部分,就是当前数值i的左边和右边的数值总和,左边的数值总和可以通过从头遍历数组的时候,一个个累加;但是右边的数值,需要先计算出整个数组的数值总和,之后在从头遍历的时候,将遍历过的数值一个个减去,就能得到右边数值的总和。
但是值得注意的是,左边的数值和右边的数值都不应该包含当前i位置的值,所以减去右边数值的时候,应该首先减去当前的i值,在比较,累积左边数值的时候,应该避免累加当前i的值。
编程语言:C
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @param numsLen int nums数组长度
* @return int整型
*/
int pivotIndex(int* nums, int numsLen ) {
int left_sum = 0, right_sum = 0;
bool flag = 0;
for (int i = 0; i < numsLen; i++) // 计算出整个数组的数值总和
right_sum += nums[i];
if (right_sum == 0) // 如果数值总和是0的话,根据题目意思,直接返回0
return 0;
right_sum -= nums[0]; // 去掉第0号数据,因为如果是0的话,应该直接返回0
for (int i = 1; i < numsLen; i++) { //重新遍历一遍数组
left_sum += nums[i-1]; // 主动加上当前数组之前的数值
right_sum -= nums[i]; // 主动减去当前数值,因为比较的时候,左右两边都应该不包含当前数值
if (left_sum == right_sum) //如果找到了相同的数值,直接返回当前位置
return i;
}
return -1;
}
面试高频TOP202解析 文章被收录于专栏
采用Java,C,Python等方法去解答面试高频TOP202题目,
查看3道真题和解析
SHEIN希音公司福利 318人发布