leetcode打卡——区间维护问题——495. 提莫攻击

题目


OJ平台

题目解析

  • 维护 [l,r] 区间,根据题目给出的时间都是从小到大有序,所以通过判断与右极限位置的关系即可判断是否超出区间。
  • 分类讨论:
  1. 如果给出的时间未超出现有的中毒时间,则扩大当前中毒右区间。
  2. 如果给出的时间超出现有的中毒时间,则说明会产生一个新的中毒区间,所以进行时间的更新,然后维护新的中毒区间。
  3. 最后肯定是会有一个中毒区间没有被计算,所以再次计算即可。

解题代码

class Solution {
    
    
public:
    int findPoisonedDuration(vector<int>& timeSeries, int duration) {
    
    
        int l = timeSeries[0],r = l+duration-1;
        int sum = 0;
        for(auto&&t:timeSeries){
    
    
            if(t<=r){
    
    
                r = t+duration-1;
            }else{
    
    
                sum += (r-l)+1;
                l = t;
                r = t+duration-1;
            }
        }
        sum += (r-l)+1;
        return sum;
    }
};

猜你喜欢

转载自blog.csdn.net/m0_50945504/article/details/121246737