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