Leetcode 495

 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 #因为循环里面没有计算第一个时间点
原文地址:https://www.cnblogs.com/letianpaiai/p/13833918.html