题解 | #相等的草堆#

相等的草堆

https://www.nowcoder.com/practice/0e2f3b27bbdc45fcbc70cc4fd41e15fe

考察知识点:数组、前缀和

题目分析:

当某个位置i的左边所有草堆的和与右边所有草堆的和相等时,就是最终的结果。这样求一段区间数的和的问题一般使用前缀和算法,它能通过常数时间计算区间和。

前缀和就是将序列中某个位置的数与前面的所有数加起来,可以用S_{n}表示。当我们要求序列1~3之间所有数的和时,可以通过S_{3} - S_{0}计算,用下标为3的数和之前所有数的和减去下标为0的数,就是下标1~3之间所有数的和。

所用编程语言:C++

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型
     */
    int pivotIndex(vector<int>& nums) {
        // write code here
        int size = nums.size();
        vector<int> sum(size);
        sum[0] = nums[0];
        for (int i = 1; i < size; i++) {
            sum[i] = sum[i - 1] + nums[i];
        }
        for (int i = 1; i < size - 1; i++) {
            if (sum[i - 1] == sum[size - 1] - sum[i]) 
                return i;
        }
        return -1;
    }
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务