航班预订统计

问题陈述

这里有 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class FightBooking {
public int[] corpfightBooking(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;

}
}