题目描述
解答
首先我可以知道当没有中毒时,如果给上毒,那么此时中毒时间直接增加duration,同时更新中毒结束时间ex.
如果被上毒时已经中毒,则此时中毒时间将加上time[i]+duration-ex,同时更新ex.
class Solution {
public:
int findPoisonedDuration(vector<int>& timeSeries, int duration) {
int ans = 0;
int expired = 0;
for (int i = 0; i < timeSeries.size(); ++i) {
if (timeSeries[i] >= expired) {
ans += duration;
} else {
ans += timeSeries[i] + duration - expired;
}
expired = timeSeries[i] + duration;
}
return ans;
}
};
复杂度分析
- 时间复杂度:O(n),其中 n 是数组timeSeries的长度。我们只需要遍历一遍数组即可,因此总时间复杂度为 O(n)。
- 空间复杂度:O(1)。只需要记录未中毒的起始时间即可,因此时间复杂度为 O(1)。