互動遊戲題 最後一隻螞蟻落下的時間. Last Moment All Ants Fall_Leetcode 1503

更新於 2024/11/03閱讀時間約 6 分鐘
raw-image

這題的題目在這裡:

題目敘述

題目會給我們兩個陣列left, right 分別代表每隻螞蟻所在的初始位置 和 方向n代表木板長度。每隻螞蟻每秒鐘前進一單位長度。

問我們,每隻螞蟻從初始位置出發,0秒起算,當兩隻螞蟻相遇時,會互相掉頭,往相反方向前進,問最後一隻螞蟻掉落木板的時候是幾秒鐘?


測試範例

Example 1:

raw-image
Input: n = 4, left = [4,3], right = [0,1]
Output: 4
Explanation: In the image above:
-The ant at index 0 is named A and going to the right.
-The ant at index 1 is named B and going to the right.
-The ant at index 3 is named C and going to the left.
-The ant at index 4 is named D and going to the left.
The last moment when an ant was on the plank is t = 4 seconds. After that, it falls immediately out of the plank. (i.e., We can say that at t = 4.0000000001, there are no ants on the plank).

Example 2:

raw-image
Input: n = 7, left = [], right = [0,1,2,3,4,5,6,7]
Output: 7
Explanation: All ants are going to the right, the ant at index 0 needs 7 seconds to fall.

Example 3:

raw-image
Input: n = 7, left = [0,1,2,3,4,5,6,7], right = []
Output: 7
Explanation: All ants are going to the left, the ant at index 7 needs 7 seconds to fall.

約束條件

Constraints:

  • 1 <= n <= 104
  • 0 <= left.length <= n + 1
  • 0 <= left[i] <= n
  • 0 <= right.length <= n + 1
  • 0 <= right[i] <= n
  • 1 <= left.length + right.length <= n + 1
  • All values of left and right are unique, and each value can appear only in one of the two arrays.

演算法

這題其實算是個腦筋急轉彎的題目,若是用模擬交換方向的演算法,可能會很複雜。

關鍵在於,兩隻螞蟻相遇時,交換方向 和 不交換方向其實是等價的,並不影響最終結果

以這個例子來說,初始方向 A 往右走,B往左走


A 往右走,B往左走
-----> A B <--

After A, B meet each other
相遇之後,AB交換方向​

<----- A B -->

Max(5, 2) = 5
最後一隻(左邊那隻)5秒鐘的時候掉落

is equivalent to
相遇之後,AB不交換方向​ 其實也是等價的

<----- B A -->

Max(2, 5) = 5
最後一隻(左邊那隻)5秒鐘的時候掉落

推廣到更多隻螞蟻相遇,也是同樣等價的結果。

所以,掌握這個關鍵之後,一切都變得簡單許多。

讓每隻螞蟻依照初始方向,從給定的位置一直往前走,每一秒往前走一單位長度。
相遇也不交換方向(因為在這題的條件下,不交換 和 交換是等價的),一直走到最後一隻螞蟻掉落木板為止。

我們只要計算每隻螞蟻距離木板兩端點的最大值,最後再取一次最大值,就是最後一隻螞蟻掉落木板的秒數,也就是題目所求的最終答案。


程式碼


class Solution:
 def getLastMoment(self, n: int, left: List[int], right: List[int]) -> int:

  # Ants keep going is equivalent to ants exchange direction

  # Max time to left endpoint for ants going to left hand side
  time_to_left = max( left or [0] )

  # Max time to right endpoint for ants going to right hand side
  time_to_right = max( [ n - position for position in right] or [0] )

  return max(time_to_left, time_to_right)

複雜度分析

時間複雜度: O( n)
兩次線性掃描,最大長度和木板長度一樣長O(n)。

空間複雜度: O(n)
兩次線性掃描,臨時陣列的最大長度和木板長度一樣長O(n)。


關鍵知識點

關鍵在於,兩隻螞蟻相遇時,交換方向 和 不交換方向其實是等價的,並不影響最終結果。(建議在紙上畫個圖,加深印象,這題算是滿經典的腦筋急轉彎題目。)


Reference:

[1] Python O(n) just keep going and get maximal distance. [w/ Comment] - Last Moment Before All Ants Fall Out of a Plank - LeetCode

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目會給我們個陣列target,問我們從整數串流中1~n之中,如何透過stack 的 push和pop來模擬生成target指定的形式?
題目會給一顆二元樹,要求我們計算節點值 和 子樹平均值相等的node有幾個。
題目會給定一個字串s,裡面都是由()*打散交錯而成。 配對規則 左括弧 ( 可以和 右括弧 ) 配對,其中 左括弧一定要在右括弧的左邊。 左括弧 ( 也可以和 *星號 配對,其中 左括弧一定要在*星號的左邊。 問我們給定的輸入字串s是否為合法括弧配對字串?
題目會給我們一個輸入陣列,陣列裡面存放的是每個元素做XOR之後的前綴累積值。 要求我們從累積值還原出原本的陣列元素值。 XOR前綴累積值定義: pref[i] = arr[0] ^ arr[1] ^ ... ^ arr[i]
題目會給定一組規則,要求我們計算給定長度下的母音直線排列有幾種?
題目會給定一個存有整數的陣列,要求我們依照下列規則進行排序,由小排到大,升序排列。
題目會給我們個陣列target,問我們從整數串流中1~n之中,如何透過stack 的 push和pop來模擬生成target指定的形式?
題目會給一顆二元樹,要求我們計算節點值 和 子樹平均值相等的node有幾個。
題目會給定一個字串s,裡面都是由()*打散交錯而成。 配對規則 左括弧 ( 可以和 右括弧 ) 配對,其中 左括弧一定要在右括弧的左邊。 左括弧 ( 也可以和 *星號 配對,其中 左括弧一定要在*星號的左邊。 問我們給定的輸入字串s是否為合法括弧配對字串?
題目會給我們一個輸入陣列,陣列裡面存放的是每個元素做XOR之後的前綴累積值。 要求我們從累積值還原出原本的陣列元素值。 XOR前綴累積值定義: pref[i] = arr[0] ^ arr[1] ^ ... ^ arr[i]
題目會給定一組規則,要求我們計算給定長度下的母音直線排列有幾種?
題目會給定一個存有整數的陣列,要求我們依照下列規則進行排序,由小排到大,升序排列。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
遊戲化行銷結合遊戲元素,使顧客在購物過程中獲得樂趣,從而提高品牌參與度與互動性。透過設定明確的目標與獎勵、融入遊戲挑戰以及善用社群媒體,品牌能有效吸引顧客並深化他們對品牌的好感。本文將探討如何制定有效的遊戲化行銷策略,並分享成功案例,幫助品牌提升市場競爭力。
Thumbnail
桃園新屋真是越來越好玩了!熱情推薦到「永安漁港」&「永安海螺文化體驗園區」賞海景、觀夕陽、吃海鮮、避暑玩AR看展覽,免門票!不限年齡都適合!
Thumbnail
題目敘述 Dota2 的世界有兩個陣營:Radiant(天輝)和 Dire(夜魘) Dota2 元老院由兩派的元老組成。現在元老院希望對一個 Dota2 遊戲裡的改變作出決定。他們以一個回合制的過程的進行投票。在每一輪中,每一位元老都可以行使兩項權利中的一項: 禁止一名元老的權利:元老
Thumbnail
20幾年前開始注意卓銘順的創作,著眼於他居家及工作室前的那個小小的池塘。池子裡收集了他所重視的臺灣原生生物,在進入他的工作室前,他會耐心地一一為你介紹池子內的生態種類,就像他用鈷藍一筆一筆彩繪在陶瓷器上一般。當時他用青花工筆彩繪結合陶版成形完成各種實用容器,茶具、花器、陶燈、香薰器等,融合他自己的小
Thumbnail
題目會給我們兩個陣列left, right 分別代表每隻螞蟻所在的初始位置 和 方向,n代表木板長度。每隻螞蟻每秒鐘前進一單位長度。 問我們,每隻螞蟻從初始位置出發,0秒起算,當兩隻螞蟻相遇時,會互相掉頭,往相反方向前進,問最後一隻螞蟻掉落木板的時候是幾秒鐘?
Thumbnail
近期一款名為《完蛋!我被美女包圍了!》的遊戲大受歡迎。這個遊戲以真人模擬的互動愛情模式為主題,自10月18日上架Steam平台以來,一直保持著高度的熱度,最近更是在Steam國區榜單上連續登頂,勝過許多其他熱門的免費遊戲。 《完蛋》講述的是一個極富情趣的故事。只需花費8.4美元,玩家便可以進入這個
Thumbnail
台灣有許多大企業都設立有博物館,這些博物館都反映該企業的內部企業資源分享給社會大眾來參觀。台灣館中油作為台灣石油業的大公司就設立有石油探索館。 台灣中油石油探索館相關資訊:: 地址:​ 台北市信義區松仁路3號 開放時間:​ AM9:00-PM17:00 (館休日:周六、周日) 電話:​
Thumbnail
小大人大小事 『繪本我先讀』|EP001   1~2歲的小大人開始探索興趣階段,可以很多元的閱讀,但是如果利用有遊戲和互動性的繪本做引導,在共讀的路上更能進入狀況,但是怎麼挑選繪本才會有遊戲性和互動性呢?   一開始挑選有人物互動而且人物關係是小大人孰悉的,這樣會更有帶入感喔,例如關於爸爸媽媽的故事
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
遊戲化行銷結合遊戲元素,使顧客在購物過程中獲得樂趣,從而提高品牌參與度與互動性。透過設定明確的目標與獎勵、融入遊戲挑戰以及善用社群媒體,品牌能有效吸引顧客並深化他們對品牌的好感。本文將探討如何制定有效的遊戲化行銷策略,並分享成功案例,幫助品牌提升市場競爭力。
Thumbnail
桃園新屋真是越來越好玩了!熱情推薦到「永安漁港」&「永安海螺文化體驗園區」賞海景、觀夕陽、吃海鮮、避暑玩AR看展覽,免門票!不限年齡都適合!
Thumbnail
題目敘述 Dota2 的世界有兩個陣營:Radiant(天輝)和 Dire(夜魘) Dota2 元老院由兩派的元老組成。現在元老院希望對一個 Dota2 遊戲裡的改變作出決定。他們以一個回合制的過程的進行投票。在每一輪中,每一位元老都可以行使兩項權利中的一項: 禁止一名元老的權利:元老
Thumbnail
20幾年前開始注意卓銘順的創作,著眼於他居家及工作室前的那個小小的池塘。池子裡收集了他所重視的臺灣原生生物,在進入他的工作室前,他會耐心地一一為你介紹池子內的生態種類,就像他用鈷藍一筆一筆彩繪在陶瓷器上一般。當時他用青花工筆彩繪結合陶版成形完成各種實用容器,茶具、花器、陶燈、香薰器等,融合他自己的小
Thumbnail
題目會給我們兩個陣列left, right 分別代表每隻螞蟻所在的初始位置 和 方向,n代表木板長度。每隻螞蟻每秒鐘前進一單位長度。 問我們,每隻螞蟻從初始位置出發,0秒起算,當兩隻螞蟻相遇時,會互相掉頭,往相反方向前進,問最後一隻螞蟻掉落木板的時候是幾秒鐘?
Thumbnail
近期一款名為《完蛋!我被美女包圍了!》的遊戲大受歡迎。這個遊戲以真人模擬的互動愛情模式為主題,自10月18日上架Steam平台以來,一直保持著高度的熱度,最近更是在Steam國區榜單上連續登頂,勝過許多其他熱門的免費遊戲。 《完蛋》講述的是一個極富情趣的故事。只需花費8.4美元,玩家便可以進入這個
Thumbnail
台灣有許多大企業都設立有博物館,這些博物館都反映該企業的內部企業資源分享給社會大眾來參觀。台灣館中油作為台灣石油業的大公司就設立有石油探索館。 台灣中油石油探索館相關資訊:: 地址:​ 台北市信義區松仁路3號 開放時間:​ AM9:00-PM17:00 (館休日:周六、周日) 電話:​
Thumbnail
小大人大小事 『繪本我先讀』|EP001   1~2歲的小大人開始探索興趣階段,可以很多元的閱讀,但是如果利用有遊戲和互動性的繪本做引導,在共讀的路上更能進入狀況,但是怎麼挑選繪本才會有遊戲性和互動性呢?   一開始挑選有人物互動而且人物關係是小大人孰悉的,這樣會更有帶入感喔,例如關於爸爸媽媽的故事