题解 | #相等的草堆#

相等的草堆

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题目,

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务