这里有 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
(1)差分数组
参考小而美的算法技巧:差分数组。
//思路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;
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_43004044/article/details/122905662
内容来源于网络,如有侵权,请联系作者删除!