互動遊戲題 最後一隻螞蟻落下的時間. 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

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
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
神秘的科學家對一群螞蟻窩做了一個實驗(有點殘忍,但很勵志!),那群科學家,對螞蟻窩點了一個蚊香,之後,有一群螞蟻對著那個蚊香噴灑自己的"蟻酸",結果因為隻螞蟻的蟻酸有限,於是一群螞蟻統一對著那個蚊香噴射自己的蟻酸,因為第一次作戰,第一批"勇士螞蟻"葬身火海"。
Thumbnail
好吧~看著眼前兩條晃動的觸鬚…… 不出我所料,不是蒼蠅、蚊子,就是蟑螂、螞蟻這種好殺的昆蟲…… 這長觸鬚……是小強吧… 還是這個屋子… 我到底是還要死幾次?
Thumbnail
螞蟻的一天從充滿各種活動開始 螞蟻腦袋都在想什麼?他們是怎麼溝通? 不知道有沒有人跟我一樣,對一些生物特別感興趣。 還記得小時候作文,我寫了一篇「螞蟻是最強搬運工」。 內容大概就是在描述他們「團結力量大」、「分工合作」。 今天我們來說說螞蟻故事,螞蟻都在幹嘛?
Thumbnail
一年將近有52禮拜時間,十年有520禮拜,50年有2600禮拜,當人的壽命到達80年,有將近4千個禮拜,曾幾何時,我們慢慢面對生活中重複事件,被這重複事件,活出了我們自己本身-重複、單調、煩悶,你有觀察過螞蟻嗎? 下次好好觀察螞蟻,如何去分配它們的人生? 螞蟻看似人生每天在搬食物,其實他
Thumbnail
利用音階玩手指謠、運用絲巾帶領律動、用黏土捏出可愛的小螞蟻、還可用感官盆幫小螞蟻做一個新家,我們一起跟著小螞蟻找新家吧!
Thumbnail
最近雨季,螞蟻都奮力的往上爬😑,聽說小北百貨某廠牌的滅螞蟻藥很有用° 就在今天下午過客我懶得爬上樓,請老闆Angie老師幫忙點一下螞蟻藥,但放學時間一到,小孩下樓一直說:老師二大教室有血,真是驚死人了,過客心想怎可能啦!就在剛剛另一位老師上樓,我請她拍給我看,真是大傻眼呀! 我明明跟Ang
我要瘋了,昨天是什麼日子,看到大水螞蟻就算了,蟑螂出來湊什麼熱鬧啊!!! 我還看到四隻——四隻! 會飛的那種欸?! 猝不及防看到,我真的是直接崩潰叫了出來。 前面三隻我都還沒叫,但這隻離得太近,是那種飛在我旁邊的近。 眼角瞥到黑色影子時,因為前面有看過三隻蟑螂了,我瞬間就意識到那飛在天上的
Thumbnail
早會活動結束後,我們一起到日光草原遊戲,孩子們好像發現了什麼⋯⋯ 勁緯:你們快來看,這裡有螞蟻。 睿綸:牠們在做什麼? 凱文:好像在搬東西耶!那是什麼東西? 禹安:應該是果實吧!好多螞蟻在搬喔! 勁緯:牠們為什麼要搬東西啊? 老師:因為快下雨了,牠們要搬東西回去
Thumbnail
螞蟻是老師養的 繼之前的我是「蟻后」的故事後,最近,我們教室引發一連串有關螞蟻的可愛小故事。  上星期開始,不論是教室或是家裡,螞蟻的數量爆增。 「奶奶說,快要下雨了」佳佳說。 「為什麼奶奶會知道?」 「因為螞蟻變很多,它們很會排隊。」 「我爸爸也說,快下雨………」軒軒說。 我心裡懷疑
Thumbnail
關係,要如同螞蟻般,撿拾遺落的片段。
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
神秘的科學家對一群螞蟻窩做了一個實驗(有點殘忍,但很勵志!),那群科學家,對螞蟻窩點了一個蚊香,之後,有一群螞蟻對著那個蚊香噴灑自己的"蟻酸",結果因為隻螞蟻的蟻酸有限,於是一群螞蟻統一對著那個蚊香噴射自己的蟻酸,因為第一次作戰,第一批"勇士螞蟻"葬身火海"。
Thumbnail
好吧~看著眼前兩條晃動的觸鬚…… 不出我所料,不是蒼蠅、蚊子,就是蟑螂、螞蟻這種好殺的昆蟲…… 這長觸鬚……是小強吧… 還是這個屋子… 我到底是還要死幾次?
Thumbnail
螞蟻的一天從充滿各種活動開始 螞蟻腦袋都在想什麼?他們是怎麼溝通? 不知道有沒有人跟我一樣,對一些生物特別感興趣。 還記得小時候作文,我寫了一篇「螞蟻是最強搬運工」。 內容大概就是在描述他們「團結力量大」、「分工合作」。 今天我們來說說螞蟻故事,螞蟻都在幹嘛?
Thumbnail
一年將近有52禮拜時間,十年有520禮拜,50年有2600禮拜,當人的壽命到達80年,有將近4千個禮拜,曾幾何時,我們慢慢面對生活中重複事件,被這重複事件,活出了我們自己本身-重複、單調、煩悶,你有觀察過螞蟻嗎? 下次好好觀察螞蟻,如何去分配它們的人生? 螞蟻看似人生每天在搬食物,其實他
Thumbnail
利用音階玩手指謠、運用絲巾帶領律動、用黏土捏出可愛的小螞蟻、還可用感官盆幫小螞蟻做一個新家,我們一起跟著小螞蟻找新家吧!
Thumbnail
最近雨季,螞蟻都奮力的往上爬😑,聽說小北百貨某廠牌的滅螞蟻藥很有用° 就在今天下午過客我懶得爬上樓,請老闆Angie老師幫忙點一下螞蟻藥,但放學時間一到,小孩下樓一直說:老師二大教室有血,真是驚死人了,過客心想怎可能啦!就在剛剛另一位老師上樓,我請她拍給我看,真是大傻眼呀! 我明明跟Ang
我要瘋了,昨天是什麼日子,看到大水螞蟻就算了,蟑螂出來湊什麼熱鬧啊!!! 我還看到四隻——四隻! 會飛的那種欸?! 猝不及防看到,我真的是直接崩潰叫了出來。 前面三隻我都還沒叫,但這隻離得太近,是那種飛在我旁邊的近。 眼角瞥到黑色影子時,因為前面有看過三隻蟑螂了,我瞬間就意識到那飛在天上的
Thumbnail
早會活動結束後,我們一起到日光草原遊戲,孩子們好像發現了什麼⋯⋯ 勁緯:你們快來看,這裡有螞蟻。 睿綸:牠們在做什麼? 凱文:好像在搬東西耶!那是什麼東西? 禹安:應該是果實吧!好多螞蟻在搬喔! 勁緯:牠們為什麼要搬東西啊? 老師:因為快下雨了,牠們要搬東西回去
Thumbnail
螞蟻是老師養的 繼之前的我是「蟻后」的故事後,最近,我們教室引發一連串有關螞蟻的可愛小故事。  上星期開始,不論是教室或是家裡,螞蟻的數量爆增。 「奶奶說,快要下雨了」佳佳說。 「為什麼奶奶會知道?」 「因為螞蟻變很多,它們很會排隊。」 「我爸爸也說,快下雨………」軒軒說。 我心裡懷疑
Thumbnail
關係,要如同螞蟻般,撿拾遺落的片段。