1109. 航班预订统计

 请注意本题有复杂度要求 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;
    }
}

 

posted @ 2020-07-08 20:21  Sexyomaru  阅读(104)  评论(0编辑  收藏  举报