1109-航班预订统计
题目
1109. 航班预订统计
难度中等 236
这里有 n
个航班,它们分别从 1
到 n
进行编号。
有一份航班预订表 bookings
,表中第 i
条预订记录 bookings[i] = [firsti, lasti, seatsi]
意味着在从 firsti
到 lasti
(包含 firsti
和 lasti
)的 每个航班 上预订了 seatsi
个座位。
请你返回一个长度为 n
的数组 answer
,其中 answer[i]
是航班 i
上预订的座位总数。
示例 1:
输入: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]
解释:
航班编号 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
思路
暴力
时间复杂度为O(N^2^)。
观察实例:
航班编号 1 2 3 4 5
预订记录 1 : 10 10
预订记录 2 : 20 20
预订记录 3 : 25 25 25 25
总座位数: 10 55 45 25 25如果是对于bookings或者n分别进行嵌套循环的话,复杂度也是O(N^2^),不可接受。因此思考O(N)的方法。
对于first
i,lasti,可以发现每个seati都要加载firsti的位置,之后复制就可以了,在lasti之后的位置减去seati。因此可以先对数组进行遍历使得结果数组res在每个first出现的位置都加上seat,在每个last的后一个位置减去seat。最后进行前缀累加即可。
代码
1 | class Solution { |