Leetcode 每日算法一題*****#495. 提莫攻擊

Question:java

在《英雄聯盟》的世界中,有一個叫 「提莫」 的英雄,他的攻擊能夠讓敵方英雄艾希(編者注:寒冰射手)進入中毒狀態。如今,給出提莫對艾希的攻擊時間序列和提莫攻擊的中毒持續時間,你須要輸出艾希的中毒狀態總時長。數組

你能夠認爲提莫在給定的時間點進行攻擊,並當即使艾希處於中毒狀態。code

示例1:io

輸入: [1,4], 2
輸出: 4
緣由: 在第 1 秒開始時,提莫開始對艾希進行攻擊並使其當即中毒。中毒狀態會維持 2 秒鐘,直到第 2 秒鐘結束。
在第 4 秒開始時,提莫再次攻擊艾希,使得艾希得到另外 2 秒的中毒時間。
因此最終輸出 4 秒。

示例2:class

輸入: [1,2], 2
輸出: 3
緣由: 在第 1 秒開始時,提莫開始對艾希進行攻擊並使其當即中毒。中毒狀態會維持 2 秒鐘,直到第 2 秒鐘結束。
可是在第 2 秒開始時,提莫再次攻擊了已經處於中毒狀態的艾希。
因爲中毒狀態不可疊加,提莫在第 2 秒開始時的此次攻擊會在第 3 秒鐘結束。
因此最終輸出 3。

注意:im

  1. 你能夠假定時間序列數組的總長度不超過 10000。
  2. 你能夠假定提莫攻擊時間序列中的數字和提莫攻擊的中毒持續時間都是非負整數,而且不超過 10,000,000。

 

Answer:時間

    解題思路:時間是一個連續的過程,因此只須要在意兩個時間節點。一個是大於等於duration的狀況,一個是小於duration的狀況(多個時間點包含在一個duration內),因此解答Java code 以下:co

 

class Solution {
    public int findPoisonedDuration(int[] timeSeries, int duration) {
     
        int result = 0;

        if (timeSeries.length > 0) {
            for (int i = 0; i < timeSeries.length - 1; i++) {
                int tmp = timeSeries[i + 1] - timeSeries[i];  //計算每兩個時間段的間隔

                if (tmp >= duration) {   //間隔是否超過持續時間
                    result += duration;
                } else {
                    result += tmp;
                }

            }
            result += duration;          //加上最後一個特殊時間段
        }
        return result;
    }
}
相關文章
相關標籤/搜索