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 # 返回总中毒时间
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理