leetcode1109. 航班预订统计-前缀和-增量-公交车上下客

这里有 n 个航班,它们分别从 1 到 n 进行编号。

有一份航班预订表 bookings ,表中第 i 条预订记录 bookings[i] = [firsti, lasti, seatsi] 意味着在从 firsti 到 lasti (包含 firsti 和 lasti )的 每个航班 上预订了 seatsi 个座位。

请你返回一个长度为 n 的数组 answer,其中 answer[i] 是航班 i 上预订的座位总数。

示例 1:

输入:bookings = [[1,2,10],[2,3,20],[2,5,25]], n = 5
输出:[10,55,45,25,25]
解释:

航班编号        1   2   3   4   5
预订记录 110  10
预订记录 220  20
预订记录 325  25  25  25
总座位数:      10  55  45  25  25

因此,answer = [10,55,45,25,25]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/corporate-flight-bookings

暴力破解 - 超时

class Solution:
    def corpFlightBookings(self, bookings, n: int):
        ans = [0]*n
        for i,j,k in bookings:
            for m in range(i-1,j):
                ans[m]+=k
        return ans

增量和 - 通过

https://leetcode-cn.com/problems/corporate-flight-bookings/solution/5118_hang-ban-yu-ding-tong-ji-by-user9081a/

在这里插入图片描述

class Solution:
    def corpFlightBookings(self, bookings, n: int):
        ans = [0]*n
        for i,j,k in bookings:
            ans[i-1] +=k
            if j<n:
                ans[j]-=k
        for i in range(1,n):
            ans[i]+= ans[i-1]
        return ans

在这里插入图片描述

bookings[0] = [1,2,10] 的时候,增量数组nums=[10,0,-10,0,0]
如果只有这一条预定记录,nums = 前缀和
则:nums = [10,10,0,0,0]

在这里插入图片描述

bookings[1] = [2,3,20]的时候,增量数组nums=[10,0+20,-10,0+20,0] = [10,20,-10,-20,0]
只有两条预定记录的时候

nums = [10,10+20,10+20-10,10+20-10-20,10+20-10-20+0] = [10,30,20,0,0]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值