详情

    时间复杂度 O(n),空间复杂度 O(1)
    官方题解计算的是每次中毒后增加的持续中毒时间的累加

    1. func findPoisonedDuration(timeSeries []int, duration int) (ans int) {
    2. expired := 0
    3. for _, t := range timeSeries {
    4. if t >= expired {
    5. ans += duration
    6. } else {
    7. ans += t + duration - expired
    8. }
    9. expired = t + duration
    10. }
    11. return
    12. }

    我写的
    我的理解是,如果第一次中毒加上持续时间大于下一次开始时间,那么这次中毒持续时间就是两次时间的差,如果小于就是持续时间,到最后一次一定是一个完整的持续时间

    func findPoisonedDuration(timeSeries []int, duration int) int {
        var total int
        for i := 0; i < len(timeSeries); i++ {
            if i+1 == len(timeSeries) {
                total += duration
                break
            }
            if timeSeries[i]+duration > timeSeries[i+1] {
                total += timeSeries[i+1] - timeSeries[i]
            } else {
                total += duration
            }
        }
        return total
    }