想了解更多数据结构以及算法题,可以关注微信公众号“数据结构和算法”,每天一题为你精彩解答。也可以扫描下面的二维码关注

问题描述

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

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

输入: [1,4], 2

输出: 4

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

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

所以最终输出4秒。

示例2:

输入: [1,2], 2

输出: 3

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

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

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

所以最终输出 3 。

提示:

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

问题分析

假设中毒的持续时间是t,只要数组中每个元素的间隔都大于t,那么总时间就是数组的长度*t。 因为下一个攻击的时间还没到,中毒的持续时间就已经完成了,到下一个攻击的时间还可以继续攻击。比如中毒持续时间是2,攻击时间序列是[1,3,6,8],那么中毒的总时间就是2*4=8。

如果数组的间隔小于中毒的持续时间,下次攻击的时候时间上就会出现重叠,我们要做的就是减去这个重叠的时间。这道题比较简单,我们来看下代码。

public int findPoisonedDuration(int[] timeSeries, int duration) {//边界条件判断if (timeSeries.length == 0 || duration == 0)return 0;//res表示总的中毒持续时间int res = duration;for (int i = 1; i < timeSeries.length; i++) {//两次攻击的时间差和中毒持续的时间比较,选择小的res += Math.min(timeSeries[i] - timeSeries[i - 1], duration);}return res;
}

其实还有一种思路就是先计算所有的中毒持续时间,然后再减去重叠的时间段,可以看下

public int findPoisonedDuration(int[] timeSeries, int duration) {//计算总的中毒时间,不考虑重叠的int res = duration * timeSeries.length;for (int i = 1; i < timeSeries.length; i++) {//然后再减去重叠的时间段res -= Math.max(0, duration - (timeSeries[i] - timeSeries[i - 1]));}return res;
}

总结

这题算是比较简单的,计算的时候主要判断有没有重叠的时间段,如果有重叠,减去就行了。

468,提莫攻击的两种解决方式相关推荐

  1. chrome拦截弹窗问题的两种解决方式

    chrome拦截弹窗问题的两种解决方式 参考文章: (1)chrome拦截弹窗问题的两种解决方式 (2)https://www.cnblogs.com/CaiDaili/p/9228455.html ...

  2. redis连接不上,两种解决方式

    今天某个项目的redis连不上了,将自己用到的两个解决办法写篇记录(实际使用时方法二选一即可). redis连接不上,两种解决方式 一.首先排查本地redis连接有没有问题 1. 在服务器上查看red ...

  3. 开灯关灯问题的两种解决方式(数学建模线性代数的应用和编程实现)

    开灯关灯问题的两种解决方式 1.问题介绍 2.编程实现算法及其代码(详细) 3.就该题进行数学建模–体验线性代数的使用 1.问题介绍 有一个按钮组成的矩阵,其中每行有5个按钮,共5行.每个按钮旁边有一 ...

  4. 我的世界 服务器内切换账号密码是多少,我的世界OP查询玩家账号密码 两种解决方式...

    我的世界OP查询玩家账号密码 两种解决方式.我的世界服务器中OP想要查询玩家账号登录密码也不是不可以的,但是一般需要插件协助才能完成.目前两种方式可以实现密码查询. 我的世界服务器OP怎么查询玩家密码 ...

  5. hdfs——Attempting to operate on hdfs namenode as root 两种解决方式

    root用户启动报错: ERROR: Attempting to operate on hdfs namenode as root ERROR: but there is no HDFS_NAMENO ...

  6. 自动弹窗被拦截 html,chrome拦截弹窗问题的两种解决方式

    在前端编写中,可能会用到window.open,等方式来在新的tab打开url.但会发现,有些情况下新打开的tab页会被chrome拦截了: 出现这种情况,很有可能是因为:这些调用不是由用户行为(如: ...

  7. 文本框和按钮对不齐的两种解决方式html

    方式一: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  8. Python爬虫开发:url中文字符编码的两种解决方式

  9. Vite内网ip访问,两种配置方式

    问题 使用vite运行项目的时候,控制台会只出现127.0.0.1(localhost)本地地址访问项目.不可以通过公司内网ip访问,其他团队成员无法访问,这是因为没有将服务暴露在局域网中: 两种解决 ...

最新文章

  1. 免费学习编程的10个好工具
  2. 【JavaScript】【PPT】继承的本质
  3. debug —— C语言 编译时候进行debug的调试
  4. Python编程专属骚技巧10
  5. 火狐浏览器插件HTTPFOX抓传输数据
  6. Java(ArrayList和LinkedList)、(HashTable与HashMap)、(HashMap、Hashtable、LinkedHashMap和TreeMap比较)
  7. SVN Cannot merge into a working copy that has local modifications
  8. 读取web应用的properties文件方法
  9. 网易致歉了,是为了员工还是为了舆论压力?
  10. apache启用gzip压缩方法
  11. 15-Scala使用Option、Some、None,避免使用null
  12. 需要显卡还是cpu_装机应该在哪个硬件上省钱, CPU还是显卡, 看完本文就知道了...
  13. ReactNative 使用SectionList时出现一个黄色警告VirtualizedList:missing keys for items解决方法
  14. lqr算法 c语言,LQR最优控制原理介绍
  15. java读写xlsx文件
  16. WDR7660虚拟服务器,tp-wdr7660设置wps方法_tp-wdr7660怎么设置wps-硬件之家
  17. MongoDB 网页可视化管理(adminMongo 的安装、配置)
  18. php自测试卷2,PHP试题网
  19. [Codeforces 274E]:Mirror Room(模拟)
  20. 关于千牛移动端纯H5插件和QAP应用中H5页面的概念

热门文章

  1. mac 关于/usr 和/opt
  2. 简单瞎搞题 动态规划的优化
  3. 华为 matebook-x-pro-2020 电脑 Hackintosh 黑苹果efi引导文件
  4. 领导能力--学会说话,学会沟通
  5. tyvj p1027 木瓜地
  6. 前端开发工作提炼亮点
  7. PTA 念数字 c语言
  8. strptime和strftime
  9. 传感器测量模块解决方案
  10. spark union 会引起shuffle吗_面肌痉挛会引起肌肉萎缩吗