leetcode:495:提莫攻击

leetcode:495:提莫攻击

考查的知识点

这道题,主要考查数组方面的知识——数组的遍历

思路

艾希总的中毒时间等于每一次攻击中毒时间相加的和。所以要计算每一次攻击之后的中毒时间,题目给出攻击一次,中毒时间是duration秒,但是并不是每次攻击都要累加duration秒。因为会出现艾希中毒过程中,再次遇到攻击,再次中毒(重复中毒),这个时候中毒时间并不是依次顺延。具体理解如下:

每一次攻击之前艾希有两种状态:还在中毒过程中;没有中毒。判断艾希是哪一种状态的标准是看timeSeries[i] - timeSeries[i-1] 的差 与 中毒持续时间duration的大小关系。帮助你用它写博客:

  1. timeSeries[i] - timeSeries[i-1] > duration ,本次攻击开始时艾希没有中毒;
  2. timeSeries[i] - timeSeries[i-1] < duration ,本次攻击开始时艾希没还在中毒过程中;

根据以上描述,中毒时间累加时,就要分以上两种情况了。我们应该取timeSeries[i] - timeSeries[i-1] duration之间的比较小的那个值。实现代码如下:

//注意:每次增加的中毒时间的值
class Solution {
    public int findPoisonedDuration(int[] timeSeries, int duration) {
    	//数组为空时,中毒时间自然也为0
        if(timeSeries==null||timeSeries.length==0){
        return 0;
    }
    //数组长度为1时,中毒时间就为 题目给定的  中毒持续时间 duration
    if(timeSeries.length==1){
        return duration;
    }
    int ans = duration;
    //由题目题意可得:中毒时间不可顺延,于是:
    //遍历数组,计算每次攻击时间之间的时间差
    //借用Math类下的Math.min()获取最小值,进行累加
    for(int i=1;i<timeSeries.length;i++){
        ans+=Math.min(timeSeries[i]-timeSeries[i-1],duration);
    }
    return ans;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值