【LeetCode】1094 and 1109 (差分数组专题)

差分数组的思想可参考小而美的算法技巧:差分数组

1094. 拼车

在这里插入图片描述
在这里插入图片描述
解法:差分数组
开车经过的地点可以视为一个数组,各段旅程上下车可以理解为在子区间内进行加减操作。而差分数组的主要适⽤场景是频繁对原始数组的某个区间的元素进⾏增减。因此可以考虑使用差分数组进行求解。

class Solution:
    def carPooling(self, trips: List[List[int]], capacity: int) -> bool:
        diff = [0] * 1001
        diff[0] = capacity
        for trip in trips:
            diff[trip[1]] -= trip[0]
            diff[trip[2]] += trip[0]
        # print(diff)
        value = diff[0]
        if value < 0:
            return False
        for i in range(1, len(diff)):
            value = value + diff[i]
            # print(value)
            if value < 0:
                return False
        return True

1109. 航班预定统计

在这里插入图片描述
解法:差分数组
航班预定同样可以理解为在数组的子区间进行频繁增减操作。因此也可利用差分数组进行求解。

class Solution:
    def corpFlightBookings(self, bookings: List[List[int]], n: int) -> List[int]:
        nums = [0] * n
        for left, right, inc in bookings:
            nums[left - 1] += inc
            if right < n:
                nums[right] -= inc
    
        for i in range(1, n):
            nums[i] += nums[i - 1]
        
        return nums
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值