1109. 航班预订统计

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

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

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

开始,直观上时直接暴力破解,但超过时间限制了,被教训了,然后就肯定会有隐藏规律。

前缀和可以帮助我们解决这个问题,即我们想要加和到lasti,那我们只要在每行上将lasti + 1这个值减掉 seatsi,即后面的累加和都会是零,就可以解决这个问题。

 

输入:bookings = [[1,2,10],[2,3,20],[2,5,25]], n = 5
输出:[10,55,45,25,25]
解释:
航班编号         1   2   3   4   5
预订记录 1 :  10      -10
预订记录 2 :     20       -20
预订记录 3 :     25  
总座位数:   10 45+10  -10 + 55  -10 + 55 -20  -10 + 55 - 20 
因此,answer = [10,55,45,25,25]

class Solution:
    def corpFlightBookings(self, bookings: List[List[int]], n: int) -> List[int]:
        answer = [0] * n
        for (first,last,seat) in bookings:
            answer[first - 1] += seat
            if(last < n):
                answer[last] -= seat
        for i in range(1,n):
            answer[i] += answer[i-1]
        return answer

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值