LeetCode 495. Teemo 攻击

495. Teemo 攻击

原题连接:https://leetcode.com/articles/teemo-attacking/

在LOL中,英雄Teemo 他的攻击能够是对方中毒。那么现在给出Teemo 攻击Ashe的时间序列和中毒时间,计算出Ashe整体的中毒时间。

你可以假设Teemo 在特定时间点开始进行攻击,并使Ashe立即处于中毒状态。

例1:

输入:[1,4],2
输出:4
说明:在时间点1,Teemo开始攻击Ashe并使其立即中毒,其中毒状态持续2秒,到时间点2结束。
	 在时间点4,Teemo再次攻击Ashe,并使其中毒,中毒状态持续2秒。
	 所以最后输出中毒时长为4

例2:

输入:[1,2],2
输出:3
说明:在时间点1,Teemo开始攻击Ashe并使其立即中毒,其中毒状态持续2秒,到时间点2结束。
	 然而,在时间点2,Teemo再次攻击Ashe,当前Ashe已经处于中毒状态。
	 由于中毒状态不会叠加,所以中毒时间被重置,到时间点3结束。
	 所以最后输出中毒时长为3

注意:

  1. 假定给定时间序列数组长度不会超过10000。
  2. 假定Teemo的攻击时间序列中数据和每次攻击中毒时长都是非负整数,并不会超过10,000,000。

解:

分析

​ 问题本质是合并区间问题,我们只需要考虑两次之间的攻击间隔与中毒持续时长之间的大小即可:

​ 如果两次攻击间隔小于中毒持续时间,则中毒时间为攻击间隔;否则,即为中毒持续时间。

​ 当然最后一次攻击不用比较,中毒时间肯定为整个中毒持续时间。

代码实现

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

        int total = 0;
        for (int i = 0; i < n - 1; ++i)
            //这里判断两次攻击的时间间隔与中毒持续时间的大小
            total += Math.min(timeSeries[i + 1] - timeSeries[i], duration);
        //最后要加上最后一次攻击的中毒持续时间
        return total + duration;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值