弱智题目。
指针的左右滑动即可解决这个问题,100%时间复杂度。
class Solution {
public int pivotIndex(int[] nums) {
int i=0;//i就是这个坐标。
int left = 0;
int right = -nums[0];//左右数组之和。
for (int num : nums){
right = right+num;
}
while(i<nums.length-1){
if(left==right) return i;
left = left + nums[i];
right = right - nums[i+1];
i++;
}
if(left==0) return i;
return -1;
}
}
当然,也可以用前缀和:
整体数据之和=total,左侧=sum,中间数=num。
那么判断条件就是total - sum - num = sum。
也就是total - num = sum * 2;
先计算整体之和,然后按照这个条件遍历num与sum即可,注意需要开辟一个存放sum的空间。
class Solution {
public int pivotIndex(int[] nums) {
int total = Arrays.stream(nums).sum();
int sum = 0;
for (int i = 0; i < nums.length; ++i) {
if (2 * sum + nums[i] == total) {
return i;
}
sum += nums[i];
}
return -1;
}
}