LeetCode1109-航班预订统计

题目链接

英文链接:https://leetcode.com/problems/corporate-flight-bookings/

中文链接:https://leetcode-cn.com/problems/corporate-flight-bookings/

题目详述

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

我们这儿有一份航班预订表,表中第 i 条预订记录 bookings[i] = [i, j, k] 意味着我们在从 i 到 j 的每个航班上预订了 k 个座位。

请你返回一个长度为 n 的数组 answer,按航班编号顺序返回每个航班上预订的座位数。

示例:

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

提示:

  • 1 <= bookings.length <= 20000
  • 1 <= bookings[i][0] <= bookings[i][1] <= n <= 20000
  • 1 <= bookings[i][2] <= 10000

题目详解

类似于 LeetCode1094-拼车,在左边界做加法,在右边界(或下一个位置)做减法,前缀和就是结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class LeetCode_01109 {

public int[] corpFlightBookings(int[][] bookings, int n) {
int[] res = new int[n];
for (int[] booking : bookings) {
int b = booking[0] - 1, e = booking[1], k = booking[2];
res[b] += k;
if (e < n) {
res[e] -= k;
}
}
for (int i = 1; i < n; ++i) {
res[i] += res[i - 1];
}
return res;
}
}