力扣 495. 提莫攻击

该篇博客讨论了《英雄联盟》中提莫对艾希的中毒攻击策略,通过分析提莫的攻击时间序列和中毒持续时间,计算出艾希中毒状态的总时长。提供了多种编程语言的解决方案,包括Python和Java,强调了处理相邻差值和中毒持续时间的关系,并优化了算法效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/teemo-attacking
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

示例1:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/teemo-attacking
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方法1

1、将数组中相邻的差值和持续时间duration做比较。如果差值小于duration则总时间sum+=差值;如果差值大于duration则总时间sum+=duration

2、考虑持续时间duration为0 和 数组长度为0 的情况

if duration == 0 or len(timeSeries) == 0:
     return 0

3、python中的没有 && 和 || 形式
python中是没有&&及||这两个运算符的,取而代之的是英文 and 和 or 。

4、python中没有 a++ 形式

Python实现
class Solution:
    def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int:
        sum = 0
        var = timeSeries[0]
        for i in timeSeries:
            pre = i - var
            var = i
            if pre < duration:
                sum += pre
            else:
                sum += duration
        sum += duration
        if duration == 0 or len(timeSeries) == 0:
            return 0
        else:
            return sum

在这里插入图片描述

Java实现1
class Solution {
    public int findPoisonedDuration(int[] timeSeries, int duration) {
        int time = 0;
        for (int i = 0; i < timeSeries.length - 1; i++) {
            if ((timeSeries[i + 1] - timeSeries[i]) >= duration) {
                time = time + duration;
            } else {
                time = time + (timeSeries[i + 1] - timeSeries[i]);
            }
        }
        time = time + duration;

        return time;
    }
}

在这里插入图片描述

Java实现2

2021/11/10
又做了一遍,和之前的比较,看到了自己的进步,哭哭了。
我要继续加油继续加油!!!

class Solution {
    public int findPoisonedDuration(int[] timeSeries, int duration) {
        int n = timeSeries.length;
        int sum = 0;

        for (int i = 0; i < n - 1; i++){
            sum += Math.min(timeSeries[i + 1] - timeSeries[i], duration);
        }

        sum += duration;
        return sum;
    }
}

在这里插入图片描述

2022/4/12

class Solution {
    public int findPoisonedDuration(int[] timeSeries, int duration) {
        int n = timeSeries.length;
        int res = 0;
        for (int i = 0; i < n - 1; i++) {
            res += timeSeries[i] + duration > timeSeries[i + 1] ? timeSeries[i + 1] - timeSeries[i] : duration;
        }
        return res + duration;
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值