「[leetcode]应景鼠年——提莫队长给大家拜年 | 春节快乐 」

488 阅读3分钟

算法小渣渣在重灾区湖北祝各位同学鼠年百毒不侵升职加薪, 互联网行业越过寒冬迎来暖春, 我们早日战胜病疫, 祝祖国风调雨顺
有幸在大年三十晚上刷到这题, 先上图, 算法小渣渣嘚瑟一下

不惧艰难险阻、不惧坎坷危途,提莫怀着无比的热情和欢欣的精神探索着整个世界。作为一个约德尔人,他对自己的道德观坚定不移,同时对班德尔斥候的信条感到自豪,有的时候,他的热忱甚至会让他无法看到,自己行为会在更大的意义上导致什么样的后果。虽然有的人认为这支斥候小队是否真正存在还有待商榷,但有一件事是肯定的:提莫的信念绝不容小觑。

“提莫既是一位活泼开朗的同胞,又是一名无与伦比的杀手,但他始终是我朋友的不二人选。”~崔丝塔娜

495. 提莫攻击

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

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

示例1:

输入: [1,4], 2

输出: 4

原因: 在第 1 秒开始时,提莫开始对艾希进行攻击并使其立即中毒。中毒状态会维持 2 秒钟,直到第 2 秒钟结束。

在第 4 秒开始时,提莫再次攻击艾希,使得艾希获得另外 2 秒的中毒时间。

所以最终输出 4 秒。

示例2:

输入: [1,2], 2

输出: 3

原因: 在第 1 秒开始时,提莫开始对艾希进行攻击并使其立即中毒。中毒状态会维持 2 秒钟,直到第 2 秒钟结束。

但是在第 2 秒开始时,提莫再次攻击了已经处于中毒状态的艾希。

由于中毒状态不可叠加,提莫在第 2 秒开始时的这次攻击会在第 3 秒钟结束。

所以最终输出 3。

注意:

你可以假定时间序列数组的总长度不超过 10000。

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

/**
 * @param {number[]} timeSeries
 * @param {number} duration
 * @return {number}
 */
var findPoisonedDuration = function(timeSeries, duration) {
  if (timeSeries.length === 0) {
    return 0
  } else {
    let res = duration
    const len = timeSeries.length
    for (let i = 1; i < len; ++i) {
      res += Math.min(timeSeries[i] - timeSeries[i - 1], duration)
    }
    return res
  }
};

解题

考虑时间序列timeSeries为空, 初始化结果为第一次的中毒持续时间duration, 每次累加两次时间间隔中毒持续时间的最小值

复杂度分析

时间复杂度O(n), 空间复杂度O(1)