leetcode 495.提莫攻击

题目:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

思路:

1、比对先前中毒的时间

上次中毒的持续时间=当前中毒时间-上次中毒时间

如果中毒的持续时间:timeSeries[i] - timeSeries[i-1] >= duration,走完中毒持续时间,

否则 timeSeries[i] - timeSeries[i-1] < duration ,没有走完中毒持续时间

最后需要一次中毒需要将维持duration,结果要加上duration。

2、单次扫描

记录未中毒的起始时间为expired,遭到攻击的时间为 timeSeries[i]。

如果当前未处于中毒的状态,现在的时间,如果比expired大和相等,说明是可以走完中毒时间的。

如果正处于中毒状态,且需要重新刷新expired,需要将当前中毒的持续时间减去expired,并更新expired的值为当前中毒时间,结果为差。

代码

1、比对先前中毒的时间

class Solution:
    def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int:
        res = 0
        for i in range(1, len(timeSeries)):
            gap = timeSeries[i] - timeSeries[i - 1] # 和上次攻击的间隙
            if gap >= duration: # 如果大于持续时间,说明有秒数走完中毒持续时间
                res += duration
            else:
                res += gap # 否则,加上秒数之间的间隔。
        res += duration # 因为比对的是上一次中毒的时间,最后的元素需要加上持续的时间
        return res

2、单次扫描

class Solution:
    def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int:
        res = expired = 0
        for i in range(len(timeSeries)):
            if timeSeries[i] >= expired: # 如果当前时间不在上次中毒持续时间内
                res += duration
            else:
                res += timeSeries[i] + duration - expired # 本次中毒的持续时间
            expired = timeSeries[i] + duration
        return res

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值