LeetCode 1109 航班预定统计[差分数组 前缀和] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1109 航班预定统计[差分数组 前缀和] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。


解题思路:
乍看这题,不就是暴力吗,怎么还是中等难度,自信满满写完代码,一跑竟然超时了,代码如下:

class Solution {
public:
    vector<int> corpFlightBookings(vector<vector<int>>& bookings, int n) {
        vector<int> count(n);
        for(auto& booking : bookings) {
            for(int i = booking[0] - 1; i <= booking[1] - 1; i ++) {
                count[i] += booking[2];
            }
        }
        return count;
    }
};

差分+前缀和的方法才是正道,而且并没有空间换时间,只不过是多用了一次O(n)时间而已,差分是标记每个范围的两端,最左边+当前的预定数,表示从这开始到结束都是该数,右端+1位置-当前预定数,表示结束了不用再重复加了,最后for循环遍历差分数组,让count[i] += count[i- 1];就可以实现预定统计了,代码如下:

class Solution {
public:
    vector<int> corpFlightBookings(vector<vector<int>>& bookings, int n) {
        vector<int> count(n);
        for(auto& booking : bookings) {
            count[booking[0] - 1] += booking[2];
            if(booking[1] < n) {
               count[booking[1]] -= booking[2];
            }
        }
        for(int i = 1; i < n; i ++) {
            count[i] += count[i- 1];
        }
        return count;
    }
};

以上是关于LeetCode 1109 航班预定统计[差分数组 前缀和] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

[M差分] lc1109. 航班预订统计(差分+水题)

[M差分] lc1109. 航班预订统计(差分+水题)

Leetcode刷题100天—1109. 航班预订统计(数组)—day24

Leetcode刷题100天—1109. 航班预订统计(数组)—day24

1109. 航班预订统计

1109. 航班预订统计