1109. 航班预订统计

方法一:超时

class Solution:
    def corpFlightBookings(self, bookings: List[List[int]], n: int) -> List[int]:
        ans = []
        for i in range(1, n+1):
            res = 0
            for a, b, x in bookings:
                if i in range(a, b+1):
                    res += x
            ans.append(res)
        return ans

方法二:超时

class Solution:
    def corpFlightBookings(self, bookings: List[List[int]], n: int) -> List[int]:
        ans = [0] * n
        for a, b, x in bookings:
            for i in range(a, b+1):
                ans[i-1] += x
        return ans

方法三:差分

原数组和差分数组分别为 x,y:

y[i] = x[i] - x[i-1] # 可覆盖 x,在原数组的基础上得到差分数组。
x = accumulate(y) # 前缀和与差分一个加(和)一个减(差)

数组 1109. 航班预订统计_数组1109. 航班预订统计_python_02 项加 1109. 航班预订统计_算法_03,相对于前缀和数组 1109. 航班预订统计_List_04 从第 1109. 航班预订统计_python_02 项开始逐个加 1109. 航班预订统计_算法_03,对于区间 1109. 航班预订统计_算法_07 而言,从第 1109. 航班预订统计_数据结构_08

y[l] += inc
y[r+1] -= inc

对于区间的修改就变为了对于两个位置的修改。最后返回前缀和数组。

class Solution:
    def corpFlightBookings(self, bookings: List[List[int]], n: int) -> List[int]:
        res = [0] * n
        for a, b, x in bookings:
            res[a-1] += x # 注意 res 索引从 0 开始到 n-1,相应的 a 和 b 需要减一。
            if b < n: # 考虑越界
                res[b-1+1] -= x
        
        return list(accumulate(res))