5453. 所有螞蟻掉下來前的最後一刻(Leetcode 196周賽)

5453. 所有螞蟻掉下來前的最後一刻

有一塊木板,長度爲 n 個 單位 。一些螞蟻在木板上移動,每隻螞蟻都以 每秒一個單位 的速度移動。其中,一部分螞蟻向  移動,其他螞蟻向  移動。

當兩隻向 不同 方向移動的螞蟻在某個點相遇時,它們會同時改變移動方向並繼續移動。假設更改方向不會花費任何額外時間。

而當螞蟻在某一時刻 t 到達木板的一端時,它立即從木板上掉下來。

給你一個整數 n 和兩個整數數組 left 以及 right 。兩個數組分別標識向左或者向右移動的螞蟻在 t = 0 時的位置。請你返回最後一隻螞蟻從木板上掉下來的時刻。

 

示例 1:

 

輸入:n = 4, left = [4,3], right = [0,1]
輸出:4
解釋:如上圖所示:
-下標 0 處的螞蟻命名爲 A 並向右移動。
-下標 1 處的螞蟻命名爲 B 並向右移動。
-下標 3 處的螞蟻命名爲 C 並向左移動。
-下標 4 處的螞蟻命名爲 D 並向左移動。
請注意,螞蟻在木板上的最後時刻是 t = 4 秒,之後螞蟻立即從木板上掉下來。(也就是說在 t = 4.0000000001 時,木板上沒有螞蟻)。

示例 2:

輸入:n = 7, left = [], right = [0,1,2,3,4,5,6,7]
輸出:7
解釋:所有螞蟻都向右移動,下標爲 0 的螞蟻需要 7 秒才能從木板上掉落。

示例 3:

輸入:n = 7, left = [0,1,2,3,4,5,6,7], right = []
輸出:7
解釋:所有螞蟻都向左移動,下標爲 7 的螞蟻需要 7 秒才能從木板上掉落。

示例 4:

輸入:n = 9, left = [5], right = [4]
輸出:5
解釋:t = 1 秒時,兩隻螞蟻將回到初始位置,但移動方向與之前相反。

示例 5:

輸入:n = 6, left = [6], right = [0]
輸出:6

 

提示:

  • 1 <= n <= 10^4
  • 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
  • left 和 right 中的所有值都是唯一的,並且每個值 只能出現在二者之一 中。

比賽的時候沒有做出來,當時想複雜了,想着通過每個時間更新以下螞蟻的狀態,最後的時間即爲結果,實現比較複雜就沒繼續進行。後來看到大神們的解決代碼後,思考了以下,發現實際上只需要比較初始所有螞蟻距離掉落的時間,取最大值即爲結果。因爲在運動中,雖然會發生碰撞,但碰撞的實際情況對應的所有螞蟻的運動狀態其實並沒有改變,因爲當兩隻螞蟻碰撞相互調轉方向後,可以視爲兩隻螞蟻互換方向,但由於速度不變,其實相當於未發生碰撞(即螞蟻變了,但只是完成的使命互換了而已,其代替彼此繼續運動)

class Solution {
public:
    int getLastMoment(int n, vector<int>& left, vector<int>& right) {
        int res = 0;
        for (auto x : left)
        {
            res = max(res, x);
        }
        for (auto x : right)
        {
            res = max(res, n-x);
        }
        return res;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章