zoukankan      html  css  js  c++  java
  • [Leetcode]495.提莫攻击

    题目:

    在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄,他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。现在,给出提莫对艾希的攻击时间序列和提莫攻击的中毒持续时间,你需要输出艾希的中毒状态总时长。
    你可以认为提莫在给定的时间点进行攻击,并立即使艾希处于中毒状态。
    示例1:
    
    输入: [1,4], 2
    
    输出: 4
    
    原因: 在第 1 秒开始时,提莫开始对艾希进行攻击并使其立即中毒。中毒状态会维持 2 秒钟,直到第 2 秒钟结束。
    在第 4 秒开始时,提莫再次攻击艾希,使得艾希获得另外 2 秒的中毒时间。
    所以最终输出 4 秒。
    
    示例2:
    
    输入: [1,2], 2
    输出: 3
    
    原因: 在第 1 秒开始时,提莫开始对艾希进行攻击并使其立即中毒。中毒状态会维持 2 秒钟,直到第 2 秒钟结束。
    但是在第 2 秒开始时,提莫再次攻击了已经处于中毒状态的艾希。
    由于中毒状态不可叠加,提莫在第 2 秒开始时的这次攻击会在第 3 秒钟结束。
    所以最终输出 3。
    

    条件转化

    这种方法主要是通过比较时间间距和每次的中毒状态时间,如果时间间距更大艾希就会经历一个完整的中毒状态时间。如果中毒状态时间更长,那么实际上中毒状态还没结束艾希就又中了一次毒,这样只需要加上间隔时间,
    用数学表达式来描述就是:
    AllTime+=min(Time,duration)

    class Solution {
    public:
      int findPoisonedDuration(vector<int>& timeSeries, int duration) {
          int cnt=0,length=timeSeries.size();
          if(length==0)return 0;
          for(int i=1;i<length;i++){
              int time=timeSeries[i]-timeSeries[i-1];
              if(time<duration){
                  cnt+=time;
              }else{
                  cnt+=duration;
              }
     	}
        cnt+=duration;
    	return cnt;
    	}
    };
    

    一种细微优化的处理方法,比较endTime即结束的时间,这样的优势在于不用像timeSeries[i]-timeSeries[i-1]一样读取内存(参照CSAPP),效率会更高。

    class Solution {
    public:
        int findPoisonedDuration(vector<int>& timeSeries, int duration) {
            int endTime = -1,sum = 0;
            for(auto& i:timeSeries){
                /*判断timeSeries中的发射时间与上一次中毒失效的时间*/
                if(i>=endTime){
                    sum+=duration;
                }
                else{
                    /* waste some time because of the coincide*/
                    sum+=i+duration-endTime;
                }
                /* change the endTime*/
                endTime=i+duration;
            }
            return sum;
        }
    };
    
  • 相关阅读:
    left join on/right join on/inner join on/full join on连接
    处理文件在递归中的使用?
    mysql操作锁死
    IDEA的maven项目META-INF文件夹放在哪里
    SpringBoot整合flyway
    IDEA的全局搜索和替换
    springboot使用mybatis-plus
    Docker的RabbitMQ启动后,无法通过浏览器访问15672端口打开界面
    Could not read JSON: Unexpected character ('¬' (code 172)): expected a valid value (JSON String, Number, Array, Object or token 'null', 'true' or 'false')
    No cache could be resolved for……. At least one cache should be provided per cache operation
  • 原文地址:https://www.cnblogs.com/adamwong/p/10359393.html
Copyright © 2011-2022 走看看