0
点赞
收藏
分享

微信扫一扫

1109.航班预定统计

八怪不姓丑 2022-01-09 阅读 47

在这里插入图片描述

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];
        }
    }
     /* 给闭区间 [i,j] 增加 val(可以是负数) */
    public void increment(int i, int j, int 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];// 根据差分数组构造结果数组
         /*当 j+1 >= diff.length 时, 说明是对 nums[i] 及以后的整个数组都进⾏修改,
         那么就不需要再给 diff 数组减 val 了。*/
        for (int i = 1; i < diff.length; i++) {
            res[i] = diff[i] + res[i - 1];
        }
        return res;
    }
}
	public int[] corpFlightBookings(int[][] bookings, int n) {
        int[] nums = new int[n];// nums 初始化为全 0
        Difference df = new Difference(nums);// 构造差分解法
        for (int[] booking : bookings) {
            int i = booking[0] - 1;// 注意转成数组索引要减⼀
            int j = booking[1] - 1;
            int val = booking[2];
            df.increment(i, j, val);// 对区间 nums[i..j] 增加 val
        }
        return df.result();// 返回最终的结果数组
    }
    ```
    
举报

相关推荐

0 条评论