第一题:
class Solution {
public int[] runningSum(int[] nums) {
for (int i = 1;i<nums.length;i++){
nums[i] += nums[i-1];
}
return nums;
}
}
第二题:
class Solution {
public int sumOfLeft(int index, int[] nums) {
int sum = 0;
for (int i = 0; i < index; i++) {
sum += nums[i];
}
return sum;
}
public int sumOfRight(int index, int[] nums) {
int sum = 0;
for (int i = nums.length-1; i > index; i--) {
sum += nums[i];
}
return sum;
}
public int pivotIndex(int[] nums) {
int index = -1;
for (int i = 0; i < nums.length; i++) {
if(sumOfLeft(i, nums) == sumOfRight(i, nums)){
index = i;
break;
}
}
if(index == -1){
return -1;
}
return index;
}
}
这太失败了
也有道理,毕竟我暴力求解
官方的写法比较牛逼(没想到)如果减去中心坐标然后剩下的就是2倍的左边的话,说明左边等于右边
class Solution {
public int pivotIndex(int[] nums) {
// 利用lambda表达式求解数组和
int total = Arrays.stream(nums).sum();
int sum = 0;
for (int i = 0; i < nums.length; ++i) {
// 什么骚操作?
// 减去中心下标,/2等于左边就说明右边也等于左边
if (2 * sum + nums[i] == total) {
return i;
}
sum += nums[i];
}
return -1;
}
}
网友牛逼