Every day a Leetcode
题目来源:1109. 航班预订统计
解法1:差分数组
注意到一个预订记录实际上代表了一个区间的增量。我们的任务是将这些增量叠加得到答案。因此,我们可以使用差分解决本题。
代码:
/*
* @lc app=leetcode.cn id=1109 lang=cpp
*
* [1109] 航班预订统计
*/
// @lc code=start
// 差分数组
class Solution
{
public:
vector<int> corpFlightBookings(vector<vector<int>> &bookings, int n)
{
// 构造差分数组
vector<int> diff(n + 1, 0);
for (vector<int> &booking : bookings)
{
int first = booking[0];
int last = booking[1];
int seats = booking[2];
diff[first - 1] += seats;
diff[last] -= seats;
}
int sum = 0;
vector<int> ans;
for (int i = 0; i < n; i++)
{
sum += diff[i];
ans.push_back(sum);
}
return ans;
}
};
// @lc code=end
结果:
复杂度分析:
时间复杂度:O(n+m),其中 n 是航班数,m 是数组 bookings 的元素个数。
空间复杂度:O(n),其中 n 是航班数。