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

閱讀時間約 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

86會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目會給我們個陣列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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
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歲的小大人開始探索興趣階段,可以很多元的閱讀,但是如果利用有遊戲和互動性的繪本做引導,在共讀的路上更能進入狀況,但是怎麼挑選繪本才會有遊戲性和互動性呢?   一開始挑選有人物互動而且人物關係是小大人孰悉的,這樣會更有帶入感喔,例如關於爸爸媽媽的故事