LeetCode Python 495 提莫攻擊

2021-09-11 03:24:12 字數 2172 閱讀 7183

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

你可以認為提莫在給定的時間點進行攻擊,並立即使艾希處於中毒狀態。

示例1:

輸入:[1,4], 2輸出:4原因:在第 1 秒開始時,提莫開始對艾希進行攻擊並使其立即中毒。中毒狀態會維持 2 秒鐘,直到第 2 秒鐘結束。

在第 4 秒開始時,提莫再次攻擊艾希,使得艾希獲得另外 2 秒的中毒時間。

所以最終輸出 4 秒。

示例2:

輸入:[1,2], 2輸出:3原因:在第 1 秒開始時,提莫開始對艾希進行攻擊並使其立即中毒。中毒狀態會維持 2 秒鐘,直到第 2 秒鐘結束。

但是在第 2 秒開始時,提莫再次攻擊了已經處於中毒狀態的艾希。

由於中毒狀態不可疊加,提莫在第 2 秒開始時的這次攻擊會在第 3 秒鐘結束。

所以最終輸出 3。

注意:

你可以假定時間序列陣列的總長度不超過 10000。

你可以假定提莫攻擊時間序列中的數字和提莫攻擊的中毒持續時間都是非負整數,並且不超過 10,000,000。

第一種思路:

初始化乙個res陣列全為0,如果某一時刻i,提莫攻擊了艾希,則把res[i]到res[i + duration -1]之間全部置為1,

最後返回sum(res)即可,

這種思路的問題在於題目資料規模有點大,過不了oj

class solution(object):

def findpoisonedduration(self, timeseries, duration):

""":type timeseries: list[int]

:type duration: int

:rtype: int

"""timeseries.sort()

res = [0] * 200000100

for i in range(len(timeseries)):

for j in range(duration):

res[timeseries[i] + j] = 1

return sum(res)

第二種思路:

線性掃瞄,掃瞄到提莫攻擊的每個時刻時,先判斷一下下一次攻擊時艾希還會不會處在中毒的狀態,

如果艾希已經不再中毒,那麼res 直接加上duration即可,

如果艾希還在中毒,那麼res就加上兩個時刻之差,代表中毒狀態重新整理,

最後記得加上最後一次射擊帶來的中毒持續時間(如果存在最後一次射擊的話)。

class solution(object):

def findpoisonedduration(self, timeseries, duration):

""":type timeseries: list[int]

:type duration: int

:rtype: int

"""# timeseries.sort()

# res = [0] * 30000000

# for i in range(len(timeseries)):

# for j in range(duration):

# res[timeseries[i] + j] = 1

# return sum(res)

# timeseries.sort()

res = 0

l = len(timeseries)

for i in range(l - 1):

if timeseries[i] + duration <= timeseries[i+1]:

res += duration

else:

res += timeseries[i+1] - timeseries[i]

return res + duration if l else res

LeetCode Python 打家劫舍I

你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 1 輸入 1...

leetcode Python編碼練習

貪心演算法 1.環形路上有n個加油站,第i個加油站的汽油量是gas i 你有一輛車,車的油箱可以無限裝汽油。從加油站i走到下乙個加油站 i 1 花費的油量是cost i 你從乙個加油站出發,剛開始 的時候油箱裡面沒有汽油。求從哪個加油站出發可以在環形路上走一圈。返回加油站的下標,如果沒有答案的話返回...

leetcode Python實現 70 爬樓梯

描述 假設你正在爬樓梯。需要 n 步你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。示例1 輸入 2 輸出 2 解釋 有兩種方法可以爬到樓頂。1.1 步 1 步 2.2 步 示例2 輸入 3 輸出 3 解釋 有三種方法可以爬到樓頂。...