本文已参与「新人创作礼」活动,一起开启掘金创作之路。
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
出现问题:
- 可以用list长度为0判断list为空(没考虑到列表为空)
题目中测试用例一般都有空集要记得考虑