【前缀和】【leetcode】【简单】724. 寻找数组的中心索引

题目:

给你一个整数数组 nums,请编写一个能够返回数组 “中心索引” 的方法。

数组 中心索引 是数组的一个索引,其左侧所有元素相加的和等于右侧所有元素相加的和。

如果数组不存在中心索引,返回 -1 。如果数组有多个中心索引,应该返回最靠近左边的那一个。

注意:中心索引可能出现在数组的两端。

例:

输入:nums = [1, 7, 3, 6, 5, 6]
输出:3
解释:
中心索引是 3 。
左侧数之和 (1 + 7 + 3 = 11),
右侧数之和 (5 + 6 = 11) ,二者相等。

原题地址:

724. 寻找数组的中心索引

解题思路:

利用前缀和思想求解。

  • 先求出数组所有数字之和;
  • 遍历数组,记录当前下标左侧所有数字之和leftsum(前缀和),计算右侧所有数字之和rightsum。

c代码:

int pivotIndex(int* nums, int numsSize){
    int sum = 0; // 整个数组的和
    for (int i = 0; i < numsSize; i++) sum += nums[i];
    int leftsum = 0; // 左侧数字之和
    for (int i = 0; i < numsSize; i++) {
        int rightsum = sum - nums[i] - leftsum; // 右侧数字之和
        if (leftsum == rightsum) return i;
        leftsum += nums[i];
    }
    return -1;
}

猜你喜欢

转载自blog.csdn.net/hbuxiaoshe/article/details/114271397