题目

类型:Array
image.png

解题思路

只需要对数组进行一次扫描就可以计算出总的中毒持续时间。
记录艾希恢复为未中毒的起始时间 expired,设艾希遭遇第 i 次的攻击的时间为 timeSeries[i]。当艾希遭遇第 i 攻击时:

  • 如果当前他正处于未中毒状态,则此时他的中毒持续时间应增加 duration,同时更新本次中毒结束时间 expired 等于 timeSeries[i]+duration;
  • 如果当前他正处于中毒状态,由于中毒状态不可叠加,上次中毒后结束时间为 expired,本次中毒后结束时间为 timeSeries[i]+duration,因此本次中毒增加的持续中毒时间为 timeSeries[i]+duration−expired;
  • 将每次中毒后增加的持续中毒时间相加即为总的持续中毒时间。

代码

  1. class Solution {
  2. public int findPoisonedDuration(int[] timeSeries, int duration) {
  3. int ans = 0;
  4. int expired = 0;
  5. for (int i = 0; i < timeSeries.length; ++i) {
  6. if (timeSeries[i] >= expired) {
  7. ans += duration;
  8. } else {
  9. ans += timeSeries[i] + duration - expired;
  10. }
  11. expired = timeSeries[i] + duration;
  12. }
  13. return ans;
  14. }
  15. }