原题链接:495. 提莫攻击
题目描述
示例 1:
输入:timeSeries = [1,4], duration = 2
输出:4
解释:提莫攻击对艾希的影响如下:
- 第 1 秒,提莫攻击艾希并使其立即中毒。中毒状态会维持 2 秒,即第 1 秒和第 2 秒。
- 第 4 秒,提莫再次攻击艾希,艾希中毒状态又持续 2 秒,即第 4 秒和第 5 秒。
艾希在第 1、2、4、5 秒处于中毒状态,所以总中毒秒数是 4 。
示例 2:
输入:timeSeries = [1,2], duration = 2
输出:3
解释:提莫攻击对艾希的影响如下:
- 第 1 秒,提莫攻击艾希并使其立即中毒。中毒状态会维持 2 秒,即第 1 秒和第 2 秒。
- 第 2 秒,提莫再次攻击艾希,并重置中毒计时器,艾希中毒状态需要持续 2 秒,即第 2 秒和第 3 秒。
艾希在第 1、2、3 秒处于中毒状态,所以总中毒秒数是 3 。
第一次:2022年11月11日10:54:37
解题思路
思路一(不采用)
采用Set集合的元素没有重复的特性来实现。
缺点很明显,如果 duration 的时间很长,在题目中 duration <= 10的7次方,那么这个的复杂度是很高的。
class Solution {
public int findPoisonedDuration(int[] timeSeries, int duration) {
Set<Integer> time = new HashSet<>();
for (int i = 0; i < timeSeries.length; i++) {
int timeSery = timeSeries[i];
for (int j = 0; j < duration; j++) {
time.add(timeSery + j);
}
}
return time.size();
}
}
思路二
遍历数组
class Solution {
public int findPoisonedDuration(int[] timeSeries, int duration) {
int length = timeSeries.length;
int durTime = 0;
for (int i = 0; i < length; i++) {
if (i != length - 1) {
int value = timeSeries[i + 1] - timeSeries[i];
if (value >= duration) {
durTime = durTime + duration;
}else {
durTime = durTime + value;
}
}
}
return durTime + duration;
}
}