寻找数组的中心索引
给你一个整数数组 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表示不存在
}