题目是LeetCode第196场周赛的第二题,链接:1503. 所有蚂蚁掉下来前的最后一刻。具体描述见原题。
这题其实是脑筋急转弯,想清楚逻辑之后就没啥难度了。因为两只蚂蚁相遇之后会同时改变移动方向并继续移动,所以如果在相遇之后把两只蚂蚁的角色调换一下,情况不就跟相遇之后啥都没发生一样了吗,所以直接按相遇不会发生任何事情来做就行了。也就是只需要找到向左走的蚂蚁中最靠右的位置leftMax ,那么其需要走的步数就是leftMax,同时找到向右走的蚂蚁中最靠左的位置rightMin,那么其需要走的步数就是n-rightMin`,最后的结果就是这两者之间的较大者。时间复杂度为
O
(
n
)
O(n)
O(n),空间复杂度为
O
(
1
)
O(1)
O(1)。
JAVA版代码如下:
class Solution {
public int getLastMoment(int n, int[] left, int[] right) {
if (left.length == 0 && right.length == 0) {
return 0;
}
int leftMax = -1, rightMin = n;
for (int l : left) {
leftMax = Math.max(leftMax, l);
}
for (int r : right) {
rightMin = Math.min(rightMin, r);
}
if (left.length == 0) {
return n - rightMin;
}
if (right.length == 0) {
return leftMax;
}
return Math.max(leftMax, n - rightMin);
}
}
提交结果如下:
Python版代码如下:
class Solution:
def getLastMoment(self, n: int, left: List[int], right: List[int]) -> int:
leftLen, rightLen = len(left), len(right)
if leftLen == 0 and rightLen == 0:
return 0
if leftLen == 0:
return n - min(right)
if rightLen == 0:
return max(left)
return max(n - min(right), max(left))
提交结果如下:

372

被折叠的 条评论
为什么被折叠?



