題目: LeetCode - 495. Teemo Attacking

題目說明

給一個陣列及一個整數,整數代表攻擊後能使敵人中毒的時間,陣列代表攻擊敵人的時間點,若攻擊時敵人處於中毒狀態則中毒狀態更新。

解題思路

由於中毒時被攻擊會使中毒狀態更新,所以每次中毒的時間可視為兩次攻擊的間隔及 duration 兩者取較小值,最後判斷攻擊次數是否為 0,若為 0 則回傳 0,否則回傳 ret + duration,因為最後一次攻擊時中毒時間必定為 duration,所以結果需要加上 duration

參考解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// fast IO
static auto __ = []()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
return 0;
}();
class Solution {
public:
int findPoisonedDuration(vector<int>& timeSeries, int duration)
{
int ret{}, n = timeSeries.size();
for(int i{}; i < n - 1; ++i) ret += min(timeSeries[i + 1] - timeSeries[i], duration);
return n ? ret + duration : 0;
}
};