1 class Solution: 2 def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int: 3 ''' 4 首先找到规律 5 若下一个开始的时间 减去上一个开始的时间,若结果大于 持续的时间,那么就没有重合部分,直接加上持续时间 6 若结果等于 持续时间,那么正好结束的时候,又发出了攻击,所以也没有重合,比如[1,3] 2: 那么1s开始持续两秒,到 7 2s末,那么下一次攻击就是3s时 8 那么如果小于 持续时间,那么直接就加上 这个结果,因为重复了这么多,所以后面要加上这么多 9 其实也就是这个意思:比如示例2: 2 + 2 - (1 + 2) = 2 - 1 = 1 10 ''' 11 list_time = sorted(timeSeries) 12 total_duration = 0 13 for i in range(len(timeSeries)): 14 if i == 0: 15 total_duration += duration 16 elif list_time[i] - list_time[i - 1] >= duration: 17 total_duration += duration 18 else: 19 total_duration += list_time[i] - list_time[i - 1] 20 21 return total_duration
根据上面 条件语句 可以找到每次加的都是 比较时候小的那个值..也是因为若是有重复部分,那么差值肯定会比持续时间小
1 class Solution: 2 def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int: 3 list_time = sorted(timeSeries) 4 total_duration = 0 5 if len(timeSeries) == 0: 6 return 0 7 for i in range(1, len(timeSeries)): 8 total_duration += min(list_time[i] - list_time[i - 1], duration) 9 return total_duration + duration #因为循环里面没有计算第一个时间点