leetCode-数组和字符串-寻找数组的中心索引

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

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

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

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

自己独自完成的第一个题,虽然效果差了些,但是要纪念一下

class Solution {
    public int pivotIndex(int[] nums) {
        if (nums.length < 1) {
            return -1;
        }
        int[] returnNums = new int[nums.length];
        // 遍历数组
        for (int i = 0; i < nums.length; i++) {
            // 判断当前索引前面是否有数据
            // 判断当前索引后面是否有数据
            // 1.拿索引前面的数组 索引后面的数组 相加
            int leftSum = 0;
            if (i != 0) {
                for (int j = 0; j < i; j++) {
                    leftSum += nums[j];
                }
            }

            int rightSum = 0;
            if (i != nums.length - 1) {
                for (int x = nums.length - 1; x > i; x--) {
                    rightSum += nums[x];
                }
            }
            // 2.判断是否相等
            if (leftSum == rightSum) {
                returnNums[i] = i;
            }
            //1.如果相等 增加到新的返回数组
            //2.如果不相等,返回-1
            if (leftSum != rightSum) {
                returnNums[i] = -1;
            }
        }
        //3.返回最终的数组数据
        for (int i = 0; i < returnNums.length; i++) {
            if (returnNums[i] != -1) {
                return returnNums[i];
            }
        }
        return -1;
    }
}

在这里插入图片描述
参考解答

public static int pivotIndex(int[] nums) {
    int totalSum = 0; // 计算整个数组的和
    for (int num : nums) {
        totalSum += num;
    }
    int leftSum = 0; // 左侧和的初始值为0
    for (int i = 0; i < nums.length; i++) {
        int rightSum = totalSum - leftSum - nums[i]; // 右侧和等于总和减去左侧和和当前数字
        if (leftSum == rightSum) {
            return i; // 如果左右两侧和相等,则返回当前索引作为轴心索引
        }
        leftSum += nums[i]; // 更新左侧和,将当前数字累加到左侧和中
    }
    return -1; // 如果遍历完整个数组都没有找到轴心索引,则返回-1表示不存在
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值