题意
给定一个整数数组,返回“中心下标”。“中心下标”的定义是其左边元素之和等于右边元素之和。
思路1
先算出所有数组的元素之和sum,然后遍历该数组:每次算左边的元素之和(因为考虑边界需要算上当前元素)left_sum,如果(left_sum-nums[i])*2+nums[i]==sum 则返回该元素下标,否则返回-1。
class Solution {
public int pivotIndex(int[] nums) {
int sum=0;
for(int i=0; i<nums.length;i++){
sum+=nums[i];
}
for(int i=0; i<nums.length;i++){
int left_sum=0;
for(int j=0;j<=i;j++){
left_sum+=nums[j];
}
if((left_sum-nums[i])*2+nums[i]==sum) return i;
}
return -1;
}
}
思路1改进
思路1的算法时间复杂度是n平方的复杂度,我们可以一次遍历数组的时候直接求和。
class Solution {
public int pivotIndex(int[] nums) {
int sum=0;
for(int i=0; i<nums.length;i++){
sum+=nums[i];
}
int left_sum=0;
for(int i=0; i<nums.length;i++){
if(left_sum*2+nums[i]==sum) return i;
left_sum+=nums[i];
}
return -1;
}
}