遊戲模擬題 消滅最大數量的怪獸 Eliminate Max Num of Monsters_Leetcode#1921

閱讀時間約 6 分鐘
raw-image

這題的題目在這裡:

題目敘述

這題的場景是防禦城市,免於怪獸的入侵

題目會給定兩個陣列:

一個是dist,代表怪獸和城市之間的距離

一個是speed,代表怪獸每分鐘前進的距離,也就是怪獸的速度

我們有一把一開始已經充滿電的電動槍,一槍可以擊殺一隻怪獸,擊發後需要耗費一分鐘的冷卻時間讓電動槍再次充滿電。


當怪獸抵達城市的時候,我們就算輸了。


題目要求我們計算最多可以消滅幾隻怪獸


測試範例

Example 1:

Input: dist = [1,3,4], speed = [1,1,1]
Output: 3
Explanation:
In the beginning, the distances of the monsters are [1,3,4]. You eliminate the first monster.
After a minute, the distances of the monsters are [X,2,3]. You eliminate the second monster.
After a minute, the distances of the monsters are [X,X,2]. You eliminate the thrid monster.
All 3 monsters can be eliminated.

Example 2:

Input: dist = [1,1,2,3], speed = [1,1,1,1]
Output: 1
Explanation:
In the beginning, the distances of the monsters are [1,1,2,3]. You eliminate the first monster.
After a minute, the distances of the monsters are [X,0,1,2], so you lose.
You can only eliminate 1 monster.

Example 3:

Input: dist = [3,2,4], speed = [5,3,2]
Output: 1
Explanation:
In the beginning, the distances of the monsters are [3,2,4]. You eliminate the first monster.
After a minute, the distances of the monsters are [X,0,2], so you lose.
You can only eliminate 1 monster.

約束條件

Constraints:

  • n == dist.length == speed.length
  • 1 <= n <= 10^5
  • 1 <= dist[i], speed[i] <= 10^5

演算法

題目已經給我們怪獸的距離,和怪獸的速度。我們可以接著計算出怪獸抵達城市的秒數。

然後,把計算出來的秒數,也就是怪獸抵達城市的先後次序由小到大排序好。

這一步驟用到了排序的觀念。


下一步,為了最大化怪獸擊殺數量,也就是最大化我方存活時間,就是依照怪獸威脅的輕重緩急,也就是怪獸抵達城市的先後次序,我們就按照這個順序去消滅怪獸。

這一步驟用到了Greedy 貪心的觀念,局部最優解導出全局最優解


最後,當遊戲結束(怪獸已經抵達城市,或者我方率先消滅所有怪獸)時,當下的擊殺數量就是怪獸擊殺數量的最大值


程式碼

class Solution:
 def eliminateMaximum(self, dist: List[int], speed: List[int]) -> int:
  
  n = len(dist)

  # Time of arrival = distance / speed
  time_of_arrival = [ d/s for d, s in zip(dist, speed) ]

  # Keep time of arrival sorted in ascending order
  # And we will shoot monster with this order
  time_of_arrival.sort()

  # Simulate the shooting process
  for i_th_monster in range(n):

   # one shot per minute
   shooting_time = i_th_monster
   
   if time_of_arrival[i_th_monster] <= shooting_time:
    # oops, monster already get into city.
    return i_th_monster

  # It's safe now, We can emiminate all monsters!
  # : )
  return n

複雜度分析

時間複雜度:

O( n log n ) 耗費在怪獸秒數(也是怪獸抵達城市的先後次序)的排序上。

空間複雜度:

O(n) time_of_arrival陣列,儲存怪獸抵達城市的秒數,也是抵達城市的先後順序。


關鍵知識點

為了最大化怪獸擊殺數量,也就是最大化我方存活時間,就是依照怪獸威脅的輕重緩急,也就是怪獸抵達城市的先後次序,我們就按照這個順序去消滅怪獸。

這一步驟用到了Greedy 貪心的觀念,局部最優解導出全局最優解


最後,當遊戲結束(怪獸已經抵達城市,或者我方率先消滅所有怪獸)時,當下的擊殺數量就是怪獸擊殺數量的最大值


Reference:

[1] Eliminate Maximum Number of Monsters - LeetCode

86會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目會定義一組類別和介面,要求我們實做餐廳訂位報號系統。 SeatManager(int n) : 初始化餐廳最多有n個座位,n 最少是1 int reserve() : 要求返回最小的可讓客人入座的空座位編號。 void unreserve(int seatNumber) : 取消訂位,這個座位歸
題目會給們一個陣列,還有一個k值。 好陣列定義是: 有包含nums[k]的子陣列。 分數定義是: min(nums[i], nums[i+1], ..., nums[j]) * (j - i + 1) 其中, i, j 分別是子陣列的左端點和右端點 請問,好的子陣列的最大分數是多少?
題目會給們一個陣列,還有一個k值。 接著進行比大小的遊戲,規則如下: 每次取陣列前兩個元素值比大小,比較小的會被重新安排到陣列最後方,陣列前兩個元素值比大小,同樣的,比較小的會被重新安排到陣列最後方。依此類推,反覆進行比大小的遊戲。 請問第一個能連贏k回合的是哪個數字?
題目會給我們兩個陣列left, right 分別代表每隻螞蟻所在的初始位置 和 方向,n代表木板長度。每隻螞蟻每秒鐘前進一單位長度。 問我們,每隻螞蟻從初始位置出發,0秒起算,當兩隻螞蟻相遇時,會互相掉頭,往相反方向前進,問最後一隻螞蟻掉落木板的時候是幾秒鐘?
題目會給我們個陣列target,問我們從整數串流中1~n之中,如何透過stack 的 push和pop來模擬生成target指定的形式?
題目會給一顆二元樹,要求我們計算節點值 和 子樹平均值相等的node有幾個。
題目會定義一組類別和介面,要求我們實做餐廳訂位報號系統。 SeatManager(int n) : 初始化餐廳最多有n個座位,n 最少是1 int reserve() : 要求返回最小的可讓客人入座的空座位編號。 void unreserve(int seatNumber) : 取消訂位,這個座位歸
題目會給們一個陣列,還有一個k值。 好陣列定義是: 有包含nums[k]的子陣列。 分數定義是: min(nums[i], nums[i+1], ..., nums[j]) * (j - i + 1) 其中, i, j 分別是子陣列的左端點和右端點 請問,好的子陣列的最大分數是多少?
題目會給們一個陣列,還有一個k值。 接著進行比大小的遊戲,規則如下: 每次取陣列前兩個元素值比大小,比較小的會被重新安排到陣列最後方,陣列前兩個元素值比大小,同樣的,比較小的會被重新安排到陣列最後方。依此類推,反覆進行比大小的遊戲。 請問第一個能連贏k回合的是哪個數字?
題目會給我們兩個陣列left, right 分別代表每隻螞蟻所在的初始位置 和 方向,n代表木板長度。每隻螞蟻每秒鐘前進一單位長度。 問我們,每隻螞蟻從初始位置出發,0秒起算,當兩隻螞蟻相遇時,會互相掉頭,往相反方向前進,問最後一隻螞蟻掉落木板的時候是幾秒鐘?
題目會給我們個陣列target,問我們從整數串流中1~n之中,如何透過stack 的 push和pop來模擬生成target指定的形式?
題目會給一顆二元樹,要求我們計算節點值 和 子樹平均值相等的node有幾個。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
「SCP」是一個大型IP,是由不同網絡匿名者所創造的虛構宇宙,所有的文案都是「SCP基金會」負責搜尋並收容各種具有異常屬性的個體、地點或物體(統稱為「異常」)的紀錄。
Thumbnail
感謝越來越多民眾關注「虛擬情人」議題,讓我的一系列相關文章獲得廣泛矚目,也陸續受邀前往國泰醫院精神科、臺北醫學大學健康資訊科技國際研究中心、雙和醫院、台大醫院精神部演講「虛擬情人」議題。 隨著越來越多民眾得知虛擬情人功能,接下來必須了解的就是大家心目中對它的「定位」。
Thumbnail
當我在遊玩時,大約95%的時間都是水柱和水聲陪伴著我。嗨,我是茶齋誌佑!2021年在Steam上市的《PowerWash Simulator 強力清潔模擬器》,今年1月於PS和NS平台上發售。原本我以為它只是個洗車、洗建築的輕鬆小品,沒想到它竟成了一款能洗滌我身心的遊戲。
Thumbnail
  由 A2 Softworks 與 Art Games Studio 合作開發的生存模擬冒險遊戲《攀登者:天空是極限(Climber: Sky is the Limit)》今(22)日於 PC 平台推出,官方同步釋出最新宣傳影片。
Thumbnail
遊戲名《Rise of the White Sun》,《白日昇》 法國人工作室Maestro Cinetik開發 一款民國初年軍閥割據模擬器 玩法類似歐陸戰爭系列、世界大戰系列 4大陣營:共產黨、國民黨、黑社會青幫、軍閥 周恩來、孫傳芳、吳佩孚等知名歷史人物 連背景配樂都用茉莉花
Thumbnail
筆者日前受邀參與財團法人資訊工業策進會舉辦的「數位分身與沙盒法制環境建構研析」專家座談會,發現新加坡與英國正在進行這樣的「數據模擬分析」專案計畫,實在很像電玩遊戲「模擬城市」(SimCity),其中衍生國家、城市乃至於個人的元宇宙與數位分身(Digital Twin),可應用於分析風險的高低、測試政
Thumbnail
本作為R18調酒師模擬遊戲,玩家將扮演魔王之子,來到人類社會經營酒館,可攻略的對象包含酒吧的店員龍娘、狐狸娘,以及酒客史萊姆娘、獸娘、聖女等等共15位女角,劇情有趣,內容相當豐富。
Thumbnail
《DINKUM》 獨立開發者 James Bendon 打造的模擬經營類型遊戲《真實人生(暫譯,原名:Dinkum)》,是一款讓玩家可以在灌木叢中建造新家園、自由展開新生活的模擬經營遊戲。玩家將在澳大利亞內陸的熱帶尤加利樹叢林盡情探索,探索充滿野生動物的景色,並透過狩獵、採礦、捕魚等收集寶貴資源以生
Bridge+創始人Andy在3年前剛好大學畢業,為了尋找到比較好的工作,他向學長姐多方打聽,了解不同工作的具體情況,在這個過程中他學到了很多,也發覺並不是所有的畢業生都會像他這樣這麼認真去思考、解決自己的職業問題,而是直接扎入職場,因此會碰到各種問題。
Thumbnail
抗疫期間要保持社交距離(Social Distancing),不能時常跟親朋好友見面的漫長日子該怎樣渡過呢?這時候,一份無人島的移居指南出現在廣大的電玩玩家眼前,任天堂 (Nintendo) Switch 的《集合啦!動物森友會》適時推出,成為自我隔離的心靈良藥。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
「SCP」是一個大型IP,是由不同網絡匿名者所創造的虛構宇宙,所有的文案都是「SCP基金會」負責搜尋並收容各種具有異常屬性的個體、地點或物體(統稱為「異常」)的紀錄。
Thumbnail
感謝越來越多民眾關注「虛擬情人」議題,讓我的一系列相關文章獲得廣泛矚目,也陸續受邀前往國泰醫院精神科、臺北醫學大學健康資訊科技國際研究中心、雙和醫院、台大醫院精神部演講「虛擬情人」議題。 隨著越來越多民眾得知虛擬情人功能,接下來必須了解的就是大家心目中對它的「定位」。
Thumbnail
當我在遊玩時,大約95%的時間都是水柱和水聲陪伴著我。嗨,我是茶齋誌佑!2021年在Steam上市的《PowerWash Simulator 強力清潔模擬器》,今年1月於PS和NS平台上發售。原本我以為它只是個洗車、洗建築的輕鬆小品,沒想到它竟成了一款能洗滌我身心的遊戲。
Thumbnail
  由 A2 Softworks 與 Art Games Studio 合作開發的生存模擬冒險遊戲《攀登者:天空是極限(Climber: Sky is the Limit)》今(22)日於 PC 平台推出,官方同步釋出最新宣傳影片。
Thumbnail
遊戲名《Rise of the White Sun》,《白日昇》 法國人工作室Maestro Cinetik開發 一款民國初年軍閥割據模擬器 玩法類似歐陸戰爭系列、世界大戰系列 4大陣營:共產黨、國民黨、黑社會青幫、軍閥 周恩來、孫傳芳、吳佩孚等知名歷史人物 連背景配樂都用茉莉花
Thumbnail
筆者日前受邀參與財團法人資訊工業策進會舉辦的「數位分身與沙盒法制環境建構研析」專家座談會,發現新加坡與英國正在進行這樣的「數據模擬分析」專案計畫,實在很像電玩遊戲「模擬城市」(SimCity),其中衍生國家、城市乃至於個人的元宇宙與數位分身(Digital Twin),可應用於分析風險的高低、測試政
Thumbnail
本作為R18調酒師模擬遊戲,玩家將扮演魔王之子,來到人類社會經營酒館,可攻略的對象包含酒吧的店員龍娘、狐狸娘,以及酒客史萊姆娘、獸娘、聖女等等共15位女角,劇情有趣,內容相當豐富。
Thumbnail
《DINKUM》 獨立開發者 James Bendon 打造的模擬經營類型遊戲《真實人生(暫譯,原名:Dinkum)》,是一款讓玩家可以在灌木叢中建造新家園、自由展開新生活的模擬經營遊戲。玩家將在澳大利亞內陸的熱帶尤加利樹叢林盡情探索,探索充滿野生動物的景色,並透過狩獵、採礦、捕魚等收集寶貴資源以生
Bridge+創始人Andy在3年前剛好大學畢業,為了尋找到比較好的工作,他向學長姐多方打聽,了解不同工作的具體情況,在這個過程中他學到了很多,也發覺並不是所有的畢業生都會像他這樣這麼認真去思考、解決自己的職業問題,而是直接扎入職場,因此會碰到各種問題。
Thumbnail
抗疫期間要保持社交距離(Social Distancing),不能時常跟親朋好友見面的漫長日子該怎樣渡過呢?這時候,一份無人島的移居指南出現在廣大的電玩玩家眼前,任天堂 (Nintendo) Switch 的《集合啦!動物森友會》適時推出,成為自我隔離的心靈良藥。