前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode-495-提莫攻击

leetcode-495-提莫攻击

作者头像
Spaceack
发布2020-11-04 14:44:59
4580
发布2020-11-04 14:44:59
举报
文章被收录于专栏:编程使我快乐

题目描述

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

你可以认为提莫在给定的时间点进行攻击,并立即使艾希处于中毒状态。

提示:

你可以假定时间序列数组的总长度不超过 10000。 你可以假定提莫攻击时间序列中的数字和提莫攻击的中毒持续时间都是非负整数,并且不超过 10,000,000。

示例

示例 1:

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

示例 2:

代码语言:javascript
复制
输入: [1,2], 2
输出: 3
原因: 第 1 秒初,提莫开始对艾希进行攻击并使其立即中毒。中毒状态会维持 2 秒钟,直到第 2 秒末结束。
但是第 2 秒初,提莫再次攻击了已经处于中毒状态的艾希。
由于中毒状态不可叠加,提莫在第 2 秒初的这次攻击会在第 3 秒末结束。
所以最终输出 3 。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/robot-return-to-origin


  • 解题思路 首先构造一个尽可能包含全部情况示例观察, 比如 [2,5,9,10,11,15,20], 3 然后画个数轴,在上面模拟下,观测规律即可解出。

题解1:

执行用时:328 ms, 在所有 Python3 提交中击败了64.05%的用户

内存消耗:15 MB, 在所有 Python3 提交中击败了39.77%的用户

代码语言:javascript
复制
from typing import List
class Solution:
    def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int:
        # 要对 timeSeries 为空的情况作判断, 因为这个没有一次通过,遗憾~
        if not timeSeries: 
            return 0
        sum_time = duration
        len_Serie = len(timeSeries)
        # 一个经常使用的小技巧: 遍历从 1 开始, 下标不用 +1 , 避免数组越界
        for t in range(1, len_Serie):
            time_span = timeSeries[t] - timeSeries[t-1]
            # 最简单的情况, 两次攻击间隔大于 中毒时间, 直接累加。
            if time_span >= duration:
                sum_time = sum_time + duration
            # 当攻击间隔小于中毒时间,要认真思考。
            else:
                last_time_span = duration - time_span
                sum_time = sum_time + duration - last_time_span
        return sum_time
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档