LeetCode_差分数组_中等_1109.航班预订统计

x33g5p2x  于2022-02-14 转载在 其他  
字(1.2k)|赞(0)|评价(0)|浏览(173)

1.题目

这里有 n 个航班,它们分别从 1 到 n 进行编号。

有一份航班预订表 bookings ,表中第 i 条预订记录 bookings[i] = [firsti, lasti, seatsi] 意味着在从 firsti 到 lasti (包含 firsti 和 lasti )的每个航班上预订了 seatsi 个座位。

请你返回一个长度为 n 的数组 answer,里面的元素是每个航班预定的座位总数。

示例 1:
输入:bookings = [[1,2,10],[2,3,20],[2,5,25]], n = 5
输出:[10,55,45,25,25]
解释:

输入:bookings = [[1,2,10],[2,3,20],[2,5,25]], n = 5
输出:[10,55,45,25,25]
解释:
航班编号        1   2   3   4   5
预订记录 1 :   10  10
预订记录 2 :       20  20
预订记录 3 :       25  25  25  25
总座位数:      10  55  45  25  25
因此,answer = [10,55,45,25,25]

示例 2:
输入:bookings = [[1,2,10],[2,2,15]], n = 2
输出:[10,25]
解释:

输入:bookings = [[1,2,10],[2,2,15]], n = 2
输出:[10,25]
解释:
航班编号        1   2
预订记录 1 :   10  10
预订记录 2 :       15
总座位数:      10  25
因此,answer = [10,25]

提示:
1 <= n <= 2 * 104
1 <= bookings.length <= 2 * 104
bookings[i].length == 3
1 <= firsti <= lasti <= n
1 <= seatsi <= 104

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/corporate-flight-bookings

2.思路

(1)差分数组
参考小而美的算法技巧:差分数组

3.代码实现(Java)

//思路1————差分数组
public int[] corpFlightBookings(int[][] bookings, int n) {
    //answer用于保存结果
    int[] answer = new int[n];
    for (int[] booking : bookings) {
        /*
            booking[0]: 起始航班编号
            booking[1]: 终止航班编号
            booking[2]: 每个航班上预订的座位数
            n: 航班编号的最大值
        */
        //先构造差分数组answer
        //模拟乘客上飞机
        answer[booking[0] - 1] += booking[2];
        if (booking[1] < n) {
            //模拟乘客下飞机
            answer[booking[1]] -= booking[2];
        }
    }
    //根据差分数组answer反求原数组
    for (int i = 1; i < n; i++) {
        answer[i] += answer[i - 1];
    }
    return answer;
}

相关文章

微信公众号

最新文章

更多