2023年7月19日 星期三

7/19 每日一題( 回傳中毒的總時長)

 Our hero Teemo is attacking an enemy Ashe with poison attacks! When Teemo attacks Ashe, Ashe gets poisoned for a exactly duration seconds. More formally, an attack at second t will mean Ashe is poisoned during the inclusive time interval [t, t + duration - 1]. If Teemo attacks again before the poison effect ends, the timer for it is reset, and the poison effect will end duration seconds after the new attack.

You are given a non-decreasing integer array timeSeries, where timeSeries[i] denotes that Teemo attacks Ashe at second timeSeries[i], and an integer duration.

Return the total number of seconds that Ashe is poisoned.

 

Example 1:

Input: timeSeries = [1,4], duration = 2
Output: 4
Explanation: Teemo's attacks on Ashe go as follows:
- At second 1, Teemo attacks, and Ashe is poisoned for seconds 1 and 2.
- At second 4, Teemo attacks, and Ashe is poisoned for seconds 4 and 5.
Ashe is poisoned for seconds 1, 2, 4, and 5, which is 4 seconds in total.

Example 2:

Input: timeSeries = [1,2], duration = 2
Output: 3
Explanation: Teemo's attacks on Ashe go as follows:
- At second 1, Teemo attacks, and Ashe is poisoned for seconds 1 and 2.
- At second 2 however, Teemo attacks again and resets the poison timer. Ashe is poisoned for seconds 2 and 3.
Ashe is poisoned for seconds 1, 2, and 3, which is 3 seconds in total.

 

Constraints:

  • 1 <= timeSeries.length <= 104
  • 0 <= timeSeries[i], duration <= 107
  • timeSeries is sorted in non-decreasing order.



class Solution:
    def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int:
        time_sum=0
        n=0

        for i in timeSeries:
            if n+1<len(timeSeries): #避免超出索引
               

                if i+duration >= timeSeries[n+1]: #如果時間重疊扣掉
                    time_sum-= (i+duration)-timeSeries[n+1]
            time_sum += duration
            n+=1
        return time_sum
                   
               
               

        -------------參考答案 zip
               
class Solution:
    def findPoisonedDuration(self, timeSeries: List[int], duration: int) -> int:
        time_sum=0
       
        for start,end in zip(timeSeries,timeSeries[1:]):

            time_sum+=min(duration,end-start)  
        #取攻擊間隔或是 中毒持續時間 的最小者

        time_sum += duration
        #計算最後一項,最後一項是完全加上持續時間的 沒有重複問題
        return time_sum
                   
               
               

       








標籤:

0 個意見:

張貼留言

訂閱 張貼留言 [Atom]

<< 首頁