0
点赞
收藏
分享

微信扫一扫

370.区间加法

云卷云舒xj 2022-01-09 阅读 48

在这里插入图片描述

class Difference {
    private int[] diff;// 差分数组

    public Difference(int[] nums) {/* 输⼊⼀个初始数组, 区间操作将在这个数组上进⾏ */
        diff = new int[nums.length];
        diff[0] = nums[0];  // 根据初始数组构造差分数组
        for (int i = 1; i < nums.length; i++) {
            diff[i] = nums[i] - nums[i - 1];
        }
    }

    public void increment(int i, int j, int val) {/* 给闭区间 [i,j] 增加 val(可以是负数) */
        diff[i] += val;
        if (j + 1 < diff.length) {
            diff[j + 1] -= val;
        }
    }

    public int[] result() {/* 返回结果数组 */
        int[] res = new int[diff.length];
        res[0] = diff[0];// 根据差分数组构造结果数组
        for (int i = 1; i < diff.length; i++) {
            res[i] = diff[i] + res[i - 1];
        }
        return res;
    }
}

	int[] getModifiedArray(int length, int[][] updates) {
        int nums[] = new int[length];// nums 初始化为全 0
        Difference df = new Difference(nums);// 构造差分解法
        for (int[] update : updates) {
            df.increment(update[0], update[1], update[2]);
        }
        return df.result();
    }
举报

相关推荐

0 条评论