前缀和的两种构造方法
方法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,否则当子数组是前缀时,没法减去一个数