• [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;
        }
    };
    
  • 相关阅读:
    Mysql 主从设置
    HTTP协议--请求与响应
    Memcahce(MC)系列(一)Memcache介绍、使用、存储、算法、优化
    Nginx配置性能优化
    PHP版本--HTTP session cookie原理及应用
    MYSQL 优化常用方法
    linux查询系统负载
    一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈
    数据库SQL SELECT查询的工作原理
    Unity使用UGUI进行VR游戏的界面开发
  • 原文地址:https://www.cnblogs.com/adamwong/p/10359393.html
Copyright © 2020-2023  润新知