题目:
给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法。
我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。
如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。
示例:
代码:
- 解法一
class Solution {
public int pivotIndex(int[] nums) {
if(nums==null||nums.length==0){ //判断数组是否不存在或者为空
return -1;
}
int sum=0;
for(int i=0;i<nums.length;i++){ //求出总和
sum+=nums[i];
}
if(sum-nums[0]==0){ //如果是数组第0个角标所对应的位置是中心索引
return 0;
}
int tempSum=0;
for(int i=1;i<nums.length;i++){ //逐个判断是否是中心索引
tempSum+=nums[i-1];
if(tempSum==sum-tempSum-nums[i]){ 元素i的左面是否等于元素i的右边
return i;
}
}
return -1;
}
}
- 别人的代码
class Solution {
public int pivotIndex(int[] nums) {
int n=nums.length;
int sum = 0, leftsum = 0;
for(int i=0; i<n; i++){
sum = sum + nums[i];
}
for(int i=0; i<n; i++){
leftsum = leftsum + nums[i];
if(leftsum == sum)
return i;
sum = sum - nums[i];
}
return -1;
}
}