时间复杂度 O(n),空间复杂度 O(1)
官方题解计算的是每次中毒后增加的持续中毒时间的累加
func findPoisonedDuration(timeSeries []int, duration int) (ans int) {
expired := 0
for _, t := range timeSeries {
if t >= expired {
ans += duration
} else {
ans += t + duration - expired
}
expired = t + duration
}
return
}
我写的
我的理解是,如果第一次中毒加上持续时间大于下一次开始时间,那么这次中毒持续时间就是两次时间的差,如果小于就是持续时间,到最后一次一定是一个完整的持续时间
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
}