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