leetcode1109. 航班预订统计

https://leetcode-cn.com/problems/corporate-flight-bookings/
暴力解法就是遍历数组,然后再当前的小数组上继续遍历。复杂度比较大。
这里采用差分的思想。
新建一个数组,当前位置的数记录的是,当前位置与之前位置数据的差异(也就是:当前数-前一位置的数)。
一次遍历数组,就可构建出这个差分数组:
【i,j,n】表示i位置到j位置上的数都为n,那么此时只需要在差分数组的i位置上加n,表示i位置相比于i-
1位置增加了n;在j位置上减n,表示j相比于j-1减少了n。
构建完差分数组之后,遍历一遍差分数组,就可得到每个位置上的数。

class Solution {
    public int[] corpFlightBookings(int[][] bookings, int n) {
        int[] res = new int[n];
        for(int i=0; i<bookings.length; i++){
            res[bookings[i][0]-1] += bookings[i][2];
            if(bookings[i][1]!=n){
                res[bookings[i][1]] -= bookings[i][2];
            }
        }
        for(int i=1; i<n; i++){
            res[i] += res[i-1];
        }
        return res;
    }
}

一些下标的细节需要注意

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值