有一塊木闆,長度為 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 中的所有值都是唯一的,并且每個值 隻能出現在二者之一 中。
來源:力扣(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;
}
};