力扣495---提莫攻击(英雄联盟)

题目描述
在这里插入图片描述
示例
在这里插入图片描述
分析
1:题目需要输出有效的中毒时间之和,当相邻两次攻击时间点之差(即给定数组中前后相邻的两个数)大于等于攻击一次中毒的时间(即输入的数),有效时间逐次加上duration就OK!
2:难点在于,当相邻两次攻击时间点之差小于攻击一次中毒的时间时,会产生重合效果,至于重合多少时间取决于数组前后数字之差和duration的相对大小!
3:分析至此,题目思路想必大家已经很清晰!下面附上我的代码!

代码

var findPoisonedDuration = function(timeSeries, duration) {
    if(timeSeries.length === 0)//当数组为空,即不攻击,返回0.
        return 0;
     var time=0;//声明变量计算总有效时间
for(var i=0;i<timeSeries.length-1;i++){//利用循环对每两个相邻攻击时间之差进行判断
    if(timeSeries[i+1]-timeSeries[i]>=duration){//当相邻两次攻击时间大于等于一次攻击中毒的时间
       time=time+duration;//有效时间加上一次duration
       }else{//当相邻两次攻击时间小于一次攻击中毒的时间
        time=time+timeSeries[i+1]-timeSeries[i];//有效时间增加前后相邻之差
       }
    }
 time += duration;//加上第一次的有效时间(即timeSeries[0])
return time;
};

注意
若对 time=time+timeSeries[i+1]-timeSeries[i];//有效时间增加前后相邻之差本句有疑问,画个线段图就理解了!
本人也觉得非常神奇!增加的有效时间 就是 前后相邻攻击时间之差!
在这里插入图片描述
温馨提示
仅供做题,生活中可不能攻击,不能暴力,不能🐻!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值