1109. 航班预订统计

这里有 n 个航班,它们分别从 1n 进行编号。
有一份航班预订表 bookings ,表中第 i 条预订记录 bookings[i] = [firsti, lasti, seatsi] 意味着在从 firstilasti包含 firstilasti )的 每个航班 上预订了 seatsi 个座位。
请你返回一个长度为 n 的数组 answer,里面的元素是每个航班预定的座位总数。
示例 1:
输出:[10,55,45,25,25] 解释: 航班编号 1 2 3 4 5 预订记录 1 : 10 10 预订记录 2 : 20 20 预订记录 3 : 25 25 25 25 总座位数: 10 55 45 25 25 因此,answer = [10,55,45,25,25]
示例 2:
输入:bookings = [[1,2,10],[2,2,15]], n = 2 输出:[10,25] 解释: 航班编号 1 2 预订记录 1 : 10 10 预订记录 2 : 15 总座位数: 10 25 因此,answer = [10,25]
提示:
  • 1 <= n <= 2 * 104
  • 1 <= bookings.length <= 2 * 104
  • bookings[i].length == 3
  • 1 <= firsti <= lasti <= n
  • 1 <= seatsi <= 104

法 1 差分数组

思路
差分模板题目
题解
class Difference: def __init__(self, nums): self.nums = nums self.diff = [n for n in self.nums] for i in range(1, len(nums)): self.diff[i] = self.nums[i] - self.nums[i-1] def increment(self, i, j, val): self.diff[i] += val if j + 1 < len(self.diff): self.diff[j+1] -= val def res(self): for i in range(1, len(self.nums)): self.nums[i] = self.nums[i-1] + self.diff[i] return self.nums class Solution: def corpFlightBookings(self, bookings: List[List[int]], n: int) -> List[int]: res = [0 for i in range(n+1)] d = Difference(res) for book in bookings: d.increment(*book) return d.res()[1:]