天天看點

力扣比賽 5453. 所有螞蟻掉下來前的最後一刻思路

有一塊木闆,長度為 n 個 機關 。一些螞蟻在木闆上移動,每隻螞蟻都以 每秒一個機關 的速度移動。其中,一部分螞蟻向 左 移動,其他螞蟻向 右 移動。

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

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

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

示例 1:
力扣比賽 5453. 所有螞蟻掉下來前的最後一刻思路

輸入:n = 4, left = [4,3], right = [0,1] 輸出:4 解釋:如上圖所示:

-下标 0 處的螞蟻命名為 A 并向右移動。

-下标 1 處的螞蟻命名為 B 并向右移動。

-下标 3 處的螞蟻命名為 C 并向左移動。

-下标 4 處的螞蟻命名為 D 并向左移動。 請注意,螞蟻在木闆上的最後時刻是 t = 4 秒,之後螞蟻立即從木闆上掉下來。(也就是說在 t = 4.0000000001 時,木闆上沒有螞蟻)。

示例 2:
力扣比賽 5453. 所有螞蟻掉下來前的最後一刻思路

輸入:n = 7, left = [], right = [0,1,2,3,4,5,6,7] 輸出:7 解釋:所有螞蟻都向右移動,下标為 0

的螞蟻需要 7 秒才能從木闆上掉落

示例 3:
力扣比賽 5453. 所有螞蟻掉下來前的最後一刻思路

輸入: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 中的所有值都是唯一的,并且每個值 隻能出現在二者之一 中。

來源:力扣(LeetCode)

連結:https://leetcode-cn.com/problems/last-moment-before-all-ants-fall-out-of-a-plank

著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

思路

這題感覺是考腦筋急轉彎,螞蟻碰到頭就往回走,如果不考慮螞蟻的名字,可以看作螞蟻穿透對方往前移動一步,是以最終是計算哪隻螞蟻離邊緣最遠就是要求的時間。

public:
    int getLastMoment(int n, vector<int>& left, vector<int>& right) {
          
        sort(left.begin(),left.end());
        sort(right.begin(),right.end());
        
        int lMin = 0,rMax = 0;
        if(left.size()>0)
            lMin = left[left.size()-1];
        if(right.size()>0)
            rMax = n - right[0];
        int ans = lMin > rMax ? lMin : rMax;
        return ans;  
    }
};