请注意本题有复杂度要求 O(n)
本题有一种很重要的思想,可以将本类统计问题,想象为上下车问题,我们不需要清楚的统计每个时间点有多少个人,只需要统计上车点上了多少人,下车点下了多少人,之后每个点人数可以表示为f(i) = f(i) + f(i-1)
class Solution { public int[] corpFlightBookings(int[][] bookings, int n) { int[] arr = new int[n]; for(int[] book : bookings) { arr[book[0] - 1] += book[2]; // 只需要记录预定起点i加了多少个座位,和结束点j-1减少多少个座位就可以 if(book[1] < n) arr[book[1]] -= book[2]; } for(int i = 1; i < n; i++) { arr[i] += arr[i-1]; // 最后遍历一遍,arr[i] = arr[i] + arr[i-1]; } return arr; } }