495. 提莫攻击(中等)

0️⃣python数据结构与算法学习路线
学习内容:

  • 基本算法:枚举、排序、搜索、递归、分治、优先搜索、贪心、双指针、动态规划等…
  • 数据结构:字符串(string)、列表(list)、元组(tuple)、字典(dictionary)、集合(set)、数组、队列、栈、树、图、堆等…

题目:

在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄,他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。现在,给出提莫对艾希的攻击时间序列和提莫攻击的中毒持续时间,你需要输出艾希的中毒状态总时长。
你可以认为提莫在给定的时间点进行攻击,并立即使艾希处于中毒状态。

输入输出:

输入: [1,4], 2
输出: 4
原因: 第 1 秒初,提莫开始对艾希进行攻击并使其立即中毒。中毒状态会维持 2 秒钟,直到第 2 秒末结束。
第 4 秒初,提莫再次攻击艾希,使得艾希获得另外 2 秒中毒时间。
所以最终输出 4 秒。

解题思路:

判断下一次发出攻击的时间是否在对方冰冻时间内,不在 time_count + duration,在则time_count +timeSeries[i+1]-timeSeries[i]
也可以不用 if 判断,直接用 min

算法实现:

class Solution:
    def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int:
        time_count = 0
        time_long = len(timeSeries)
        if time_long == 0: 
            return 0        
        for i in range(time_long-1):
            if  timeSeries[i] + duration < timeSeries[i+1]:
                time_count += duration
            else:
                time_count = time_count +timeSeries[i+1]-timeSeries[i]
        return time_count+duration

直接用min

class Solution:
    def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int:
        time_long  = len(timeSeries)
        if time_long  == 0:
            return 0
        time_count = 0
        for i in range(time_long  - 1):
            time_count += min(timeSeries[i + 1] - timeSeries[i], duration)
        return time_count + duration

出现问题:

  1. 可以用list长度为0判断list为空(没考虑到列表为空)
    题目中测试用例一般都有空集要记得考虑

你可能感兴趣的:(#,leetcode,算法,数据结构,python,leetcode,数组)