1109. 航班预订统计
这里有
n
个航班,它们分别从 1
到 n
进行编号。有一份航班预订表
bookings
,表中第 i
条预订记录 bookings[i] = [first
i
, last
i
, seats
i
]
意味着在从 first
i
到 last
i
(包含 first
i
和 last
i
)的 每个航班 上预订了 seats
i
个座位。请你返回一个长度为
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 * 10
4
1 <= bookings.length <= 2 * 10
4
bookings[i].length == 3
1 <= first
i
<= last
i
<= n
1 <= seats
i
<= 10
4
法 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:]