1. 程式人生 > 其它 >LeetCode——495. 提莫攻擊(Java)

LeetCode——495. 提莫攻擊(Java)

題目描述

題幹:
在《英雄聯盟》的世界中,有一個叫 “提莫” 的英雄。他的攻擊可以讓敵方英雄艾希(編者注:寒冰射手)進入中毒狀態。
當提莫攻擊艾希,艾希的中毒狀態正好持續duration 秒。
正式地講,提莫在 t 發起發起攻擊意味著艾希在時間區間 [t, t + duration - 1](含 t 和 t + duration - 1)處於中毒狀態。
如果提莫在中毒影響結束 前 再次攻擊,中毒狀態計時器將會 重置 ,在新的攻擊之後,中毒影響將會在 duration 秒後結束。
給你一個 非遞減 的整數陣列 timeSeries ,其中 timeSeries[i] 表示提莫在 timeSeries[i] 秒時對艾希發起攻擊
以及一個表示中毒持續時間的整數 duration 。返回艾希處於中毒狀態的 總 秒數。

示例 1:
輸入:timeSeries = [1,4], duration = 2
輸出:4
解釋:提莫攻擊對艾希的影響如下:
- 第 1 秒,提莫攻擊艾希並使其立即中毒。中毒狀態會維持 2 秒,即第 1 秒和第 2 秒。
- 第 4 秒,提莫再次攻擊艾希,艾希中毒狀態又持續 2 秒,即第 4 秒和第 5 秒。
艾希在第 1、2、4、5 秒處於中毒狀態,所以總中毒秒數是 4 。

示例 2:
輸入:timeSeries = [1,2], duration = 2
輸出:3
解釋:提莫攻擊對艾希的影響如下:
- 第 1 秒,提莫攻擊艾希並使其立即中毒。中毒狀態會維持 2 秒,即第 1 秒和第 2 秒。
- 第 2 秒,提莫再次攻擊艾希,並重置中毒計時器,艾希中毒狀態需要持續 2 秒,即第 2 秒和第 3 秒。
艾希在第 1、2、3 秒處於中毒狀態,所以總中毒秒數是 3 。

題解思路

返回中毒的總秒數,這裡注意中毒的計時狀態會根據攻擊而重新重新整理,所以我們可以模擬一下過程

每次重新整理攻擊只有兩種情況發生,第一種是這次攻擊在中毒時間內,反之則重新開始中毒計時

所以我們只需要遍歷一次陣列,如果是沒在中毒狀態則直接增加完整的中毒時間,反之增加差值

正確程式碼

    public int findPoisonedDuration(int[] timeSeries, int duration) {
        int ans = 0, expired = 0;

        for (int i = 0; i < timeSeries.length; i++) {
            if (timeSeries[i] >= expired) {
                ans += duration;
            } else {
                ans += timeSeries[i] + duration - expired;
            }
            expired = timeSeries[i] + duration;
        }
        return ans;
    }

總結

既然今天的主題是聯盟,恭喜DEG獲得S11全球總冠軍,獲得LPL戰隊中最具含金量的冠軍

上次這個激動人心的時候還是IG奪冠的時候,到現在已經過去兩年了,時光匆匆,白駒過隙

如果文章存在問題或者有更好的題解,歡迎在評論區斧正和評論,各自努力,最高處見