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

这篇博客探讨了一个关于计算中毒时间的问题。给定一个表示中毒时间的整数数组timeSeries和每次中毒的持续时间duration,算法的目标是计算总的中毒时间。在遍历数组时,如果当前时间大于已过期的中毒时间,则直接累加duration;否则,累加新的中毒时间和剩余时间之和,并更新过期时间。算法的时间复杂度为O(n),空间复杂度为O(1)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

自己看

解答

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值