Leedcode-提莫攻击

自己写的,中间算法有遗漏的遍历

复制代码
class Solution:
    def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int:
        if duration == 0:  # 如果duration为0,则返回0,因为没有中毒时间
            return 0
        count = 0  # 初始化中毒总时间
        time_box = [-1, -1]  # 初始化时间框架的左右边界,用于跟踪中毒状态
        n = len(timeSeries)  # 获取攻击时间序列的长度
        for i in range(n):
            if timeSeries[i] > time_box[1]:  # 如果当前攻击时间在之前中毒状态结束后,即在时间框架右边界之后
                time_box = [timeSeries[i], timeSeries[i] + duration - 1]  # 更新时间框架为当前攻击时间至中毒持续时间结束
                count += time_box[1] - time_box[0] + 1  # 将当前中毒时间段的长度加到中毒总时间上
            else:  # 如果当前攻击时间在之前中毒状态结束之前,即在时间框架右边界之前
                time_box = [timeSeries[i], timeSeries[i] + duration - 1]  # 更新时间框架为当前攻击时间至中毒持续时间结束
                count += (timeSeries[i] - timeSeries[i - 1])  # 将当前攻击时间与上一次攻击时间之间的间隔加到中毒总时间上
        if count == 0:  # 如果中毒总时间为0,说明所有攻击时间都在同一时间点
            return n + duration - 1  # 返回总攻击次数加上中毒持续时间减去1(因为第一次攻击不会受到中毒时间的影响)
        else:
            return count  # 返回中毒总时间
复制代码

 gpt优化:

复制代码
class Solution:
    def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int:
        if duration == 0:  # 如果中毒持续时间为0,则返回0,因为没有中毒时间
            return 0
        
        count = 0  # 初始化中毒总时间
        end_time = -1  # 初始化中毒状态结束时间
        
        for time in timeSeries:
            if time > end_time:  # 当前攻击时间在上次中毒结束时间之后
                count += duration  # 直接加上持续中毒时间
            else:  # 当前攻击时间在上次中毒结束时间之前
                count += time + duration - 1 - end_time  # 只累加新攻击带来的额外中毒时间
            end_time = time + duration - 1  # 更新中毒状态结束时间为当前攻击时间加上持续时间减去1
        
        return count  # 返回总中毒时间
复制代码

 

posted @   Junior_bond  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示