Leetcode 1503 - Last Moment Before All Ants Fall Out of a Plank

題目

Problem#

木棍長 n 個單位,上頭有一群螞蟻在走,各自朝著左方與右方,每秒移動一個單位。每當螞蟻相遇時,會各自往反方向走。當螞蟻走出 0n 時會掉出去,給你朝左與朝右的螞蟻初始位置,問你經過幾秒後,所有螞蟻都掉出木棍?

測資限制#

  • $1 \le n \le 10^4$

想法#

Naive: 直接模擬每個螞蟻的走路情況 $O(n^2)$。
但可以發現是即使螞蟻相撞,改變方向,也可以看做兩隻螞蟻維持各自的方向繼續走(雖然此時螞蟻已經是不同隻,但我們並不在乎),所以對於所有往左的螞蟻,最長距離就是 max(left[i]-0);對於所有往右的螞蟻,最長距離是 max(n-right[i]),找出最大的數字就是答案。 $O(n)$

AC Code#

  • 時間複雜度: $\mathcal{O}(n)$
  • 空間複雜度: $\mathcal{O}(1)$