Leetcode75 Day1(网友牛逼)

168 阅读1分钟

第一题: image.png

class Solution {
        public int[] runningSum(int[] nums) {
            for (int i = 1;i<nums.length;i++){
                nums[i] += nums[i-1];
            }
            return nums;
        }
    }

第二题:

image.png

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;
    }
}

这太失败了

image.png

也有道理,毕竟我暴力求解

官方的写法比较牛逼(没想到)如果减去中心坐标然后剩下的就是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;
    }
}

image.png 网友牛逼