遊戲模擬題 消滅最大數量的怪獸 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

82會員
417Content count
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言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有幾個。
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
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
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
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 的《集合啦!動物森友會》適時推出,成為自我隔離的心靈良藥。