【算法】模拟:(leetcode)495.提莫攻击(easy)
目录
题目链接
题目介绍
解法
代码
题目链接
495. 提莫攻击 - 力扣(LeetCode)
题目介绍
解法
模拟 + 分情况讨论。
当寒冰再次中毒时,上次「中毒」是否已经结束。
- 当上次中毒已经结束了,那么上次「中毒」维持的时间就是 duration;
- 如果上次中毒还没有结束,由于中毒状态将会重置,所以上次「中毒」维持的时间 = 当前中毒时间 - 上次中毒时间。
所以整体的代码思路:
对题目发起攻击的时间 timeSeries 进行遍历,记当前遍历到 i 位置:
- 如果 timeSeries[i]−timeSeries[i−1 ]>= duration,说明上次「中毒」已经结束,上次中毒维持的时间是 duration;
- 否则,说明上次「中毒」还没有结束,上次中毒维持的时间是 timeSeries[i]−timeSeries[i−1]。
注意,因为我们统计的是上次「中毒」维持的时间,不要忘记最后一次中毒将维持 duration秒。所以在遍历结束的时候,结果需要加上 duration!!
题目很简单,只要贯彻模拟的思想就可以解决~
直接看代码
代码
class Solution {
public:
int findPoisonedDuration(vector<int>& timeSeries, int duration) {
int sum = 0;
for (int i = 0; i < timeSeries.size()- 1; i++)
{
int del = timeSeries[i +1] - timeSeries[i];
//前一次攻击未结束,又发生攻击
if ( del < duration)
{
sum = sum + del;
}
else{
sum += duration;
}
}
//小坑
//最后一次中毒的时间要加上
sum += duration;
return sum;
}
};