题目描述
示例
分析
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];//有效时间增加前后相邻之差
本句有疑问,画个线段图就理解了!
本人也觉得非常神奇!增加的有效时间 就是 前后相邻攻击时间之差!
温馨提示
仅供做题,生活中可不能攻击,不能暴力,不能🐻!