刷完LeetCode题库——724. 寻找数组的中心下标

99 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第21天,点击查看活动详情

题目详情

LeetCode题库序号 724. 寻找数组的中心下标 ,难度为 简单

Tag : 「前缀和」

给你一个整数数组 nums ,请计算数组的 中心下标 。

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

如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。

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

  示例 1:

输入:nums = [1, 7, 3, 6, 5, 6]
输出:3
解释:
中心下标是 3 。
左侧数之和 sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11 ,
右侧数之和 sum = nums[4] + nums[5] = 5 + 6 = 11 ,二者相等。

示例 2:

输入: nums = [1, 2, 3]
输出: -1
解释:
数组中不存在满足此条件的中心下标。

示例 3:

输入:nums = [2, 1, -1]
输出:0
解释:
中心下标是 0 。
左侧数之和 sum = 0 ,(下标 0 左侧不存在元素),
右侧数之和 sum = nums[1] + nums[2] = 1 + -1 = 0

提示:

  • 1 <= nums.length <= 104
  • -1000 <= nums[i] <= 1000

前缀和

题解思路:首先数组的中心下标是不计算在左右两边的和中的,假如中心下标的索引位置在最左边或者是最右边,和为0,我们可以先求得数组的总和,左边的和的起始值为0。当前遍历的索引值不在计算范围内,使用总和计算右边的和,然后比较左右两边和的大小。最后找到最大值。详情见以下代码:

题解代码

/**
 * Solution操作类
 *
 * @author JackPan
 * @date 2022/08/18 13:00
 **/
public class Solution {

    public int pivotIndex(int[] nums) {
        int leftSum = 0;
        int total = 0;
        for (int num : nums) {
            total += num;
        }

        for (int i = 0; i < nums.length; i++) {
            int rightSum = total - nums[i] - leftSum;
            if (rightSum == leftSum) {
                return i;
            }

            leftSum += nums[i];
        }

        return -1;

    }
}

结尾

我的"刷完LeetCode题库"系列文章的第 No.724 序号的题目,本次刷题之旅系列开始于 2022-06-12,因为LeetCode上部分是有锁题,我自己的目标是将先把所有不带锁的题目刷完。自己能够通过这次刷题之旅勉励自己,并且提升逻辑思维能力。这个系列的文章就是会见证我自己的一个成长过程!

思路虽然不是最优的,但是我会尽我所能!

为了让我自己的刷题之旅不中断,我特地建立了相关的仓库,来记录我自己的刷题之旅。 github.com/jackpan123/…