Bootstrap

前缀和的两种构造方法

方法1

    public preSum(int[] nums) {
        // preSum[0] = 0;
        preSum = new int[nums.length + 1];
        // 计算 nums 的累加和
        for (int i = 1; i < preSum.length; i++) {
            preSum[i] = preSum[i - 1] + nums[i - 1];
        }
    }

方法2

    public preSum(int[] nums) {
        preSum[0] = nums[0];
        preSum = new int[nums.length];
        // 计算 nums 的累加和
        for (int i = 1; i < preSum.length; i++) {
            preSum[i] = preSum[i - 1] + nums[i];
        }
    }

两种方法的区别在于构造的前缀和数组的长度,是nums.length + 1还是nums.length;

如果是nums.length + 1,则构造的前缀和preSum[0] = 0;

如果是nums.length;则构造的前缀和preSum[0] = nums[0];

要想把任意子数组都表示成两个前缀和的差,必须添加 preSum[0]=0,否则当子数组是前缀时,没法减去一个数

;