自己写的,中间算法有遗漏的遍历
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 # 返回总中毒时间
标签:count,攻击,中毒,Leedcode,时间,timeSeries,time,duration,提莫 From: https://www.cnblogs.com/yyyjw/p/18196097