力扣刷题学习495. 提莫攻击(C++)

题目描述

自己看

解答

首先我可以知道当没有中毒时,如果给上毒,那么此时中毒时间直接增加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)。

你可能感兴趣的:(leetcode,算法,职场和发展)