原文链接: https://leetcode-cn.com/problems/corporate-flight-bookings
英文原文
There are n
flights that are labeled from 1
to n
.
You are given an array of flight bookings bookings
, where bookings[i] = [firsti, lasti, seatsi]
represents a booking for flights firsti
through lasti
(inclusive) with seatsi
seats reserved for each flight in the range.
Return an array answer
of length n
, where answer[i]
is the total number of seats reserved for flight i
.
Example 1:
Input: bookings = [[1,2,10],[2,3,20],[2,5,25]], n = 5 Output: [10,55,45,25,25] Explanation: Flight labels: 1 2 3 4 5 Booking 1 reserved: 10 10 Booking 2 reserved: 20 20 Booking 3 reserved: 25 25 25 25 Total seats: 10 55 45 25 25 Hence, answer = [10,55,45,25,25]
Example 2:
Input: bookings = [[1,2,10],[2,2,15]], n = 2 Output: [10,25] Explanation: Flight labels: 1 2 Booking 1 reserved: 10 10 Booking 2 reserved: 15 Total seats: 10 25 Hence, answer = [10,25]
Constraints:
1 <= n <= 2 * 104
1 <= bookings.length <= 2 * 104
bookings[i].length == 3
1 <= firsti <= lasti <= n
1 <= seatsi <= 104
中文题目
这里有 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] 解释: 航班编号 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
通过代码
高赞题解
解题思路:
- 换一种思路理解题意,将问题转换为:某公交车共有 n 站,第
i
条记录bookings[i] = [i, j, k]
表示在i
站上车k
人,乘坐到j
站,在j+1
站下车,需要按照车站顺序返回每一站车上的人数 - 根据 1 的思路,定义
counter[]
数组记录每站的人数变化,counter[i]
表示第i+1
站。遍历bookings[]
:bookings[i] = [i, j, k]
表示在i
站增加k
人即counters[i-1] += k
,在j+1
站减少k
人即counters[j] -= k
- 遍历(整理)
counter[]
数组,得到每站总人数: 每站的人数为前一站人数加上当前人数变化counters[i] += counters[i - 1]
public class CorporateFlightBookings {
public int[] corpFlightBookings(int[][] bookings, int n) {
int[] counters = new int[n];
for (int[] booking : bookings) {
counters[booking[0] - 1] += booking[2];
if (booking[1] < n) {
counters[booking[1]] -= booking[2];
}
}
for (int i = 1; i < n; ++i) {
counters[i] += counters[i - 1];
}
return counters;
}
}
统计信息
通过次数 | 提交次数 | AC比率 |
---|---|---|
61770 | 106312 | 58.1% |
提交历史
提交时间 | 提交结果 | 执行时间 | 内存消耗 | 语言 |
---|