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之路的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题100天—1109. 航班预订统计(数组)—day24