Easy
题目描述
给你三个整数 x、y 和 z,分别代表数轴上三个人的位置:
x是第 1 个人的位置。y是第 2 个人的位置。z是第 3 个人的位置,第 3 个人不会移动。
第 1 个人和第 2 个人都以相同的速度向第 3 个人移动。
确定哪个人先到达第 3 个人:
- 如果第 1 个人先到达,返回
1。 - 如果第 2 个人先到达,返回
2。 - 如果两人同时到达,返回
0。
示例 1:
输入:x = 2, y = 7, z = 4
输出:1
解释:
第 1 个人在位置 2,可以用 2 步到达第 3 个人(位置 4)。
第 2 个人在位置 7,需要 3 步到达第 3 个人。
因为第 1 个人先到达第 3 个人,所以输出是 1。
示例 2:
输入:x = 2, y = 5, z = 6
输出:2
解释:
第 1 个人在位置 2,可以用 4 步到达第 3 个人(位置 6)。
第 2 个人在位置 5,需要 1 步到达第 3 个人。
因为第 2 个人先到达第 3 个人,所以输出是 2。
示例 3:
输入:x = 1, y = 5, z = 3
输出:0
解释:
第 1 个人在位置 1,可以用 2 步到达第 3 个人(位置 3)。
第 2 个人在位置 5,需要 2 步到达第 3 个人。
因为第 1 个人和第 2 个人同时到达第 3 个人,所以输出是 0。
提示:
1 <= x, y, z <= 100
解题思路
这道题的核心思路非常简单直观:比较第 1 个人和第 2 个人到达第 3 个人所需的距离。
解题思路:
由于两个人以相同速度移动,到达时间完全取决于各自与目标位置的距离。我们需要计算:
- 第 1 个人到第 3 个人的距离:
|x - z| - 第 2 个人到第 3 个人的距离:
|y - z|
然后比较这两个距离:
- 如果第 1 个人的距离更小,返回 1
- 如果第 2 个人的距离更小,返回 2
- 如果距离相等,返回 0
算法步骤:
- 计算第 1 个人到第 3 个人的距离
dist1 = |x - z| - 计算第 2 个人到第 3 个人的距离
dist2 = |y - z| - 比较两个距离并返回相应结果
这是一个纯数学问题,时间复杂度为 O(1),空间复杂度也为 O(1)。解法简洁明了,只需要进行基本的数学运算和条件判断。
代码实现
class Solution {
public:
int findClosest(int x, int y, int z) {
int dist1 = abs(x - z);
int dist2 = abs(y - z);
if (dist1 < dist2) {
return 1;
} else if (dist2 < dist1) {
return 2;
} else {
return 0;
}
}
};
class Solution:
def findClosest(self, x: int, y: int, z: int) -> int:
dist1 = abs(x - z)
dist2 = abs(y - z)
if dist1 < dist2:
return 1
elif dist2 < dist1:
return 2
else:
return 0
public class Solution {
public int FindClosest(int x, int y, int z) {
int dist1 = Math.Abs(x - z);
int dist2 = Math.Abs(y - z);
if (dist1 < dist2) {
return 1;
} else if (dist2 < dist1) {
return 2;
} else {
return 0;
}
}
}
var findClosest = function(x, y, z) {
const dist1 = Math.abs(x - z);
const dist2 = Math.abs(y - z);
if (dist1 < dist2) {
return 1;
} else if (dist2 < dist1) {
return 2;
} else {
return 0;
}
};
复杂度分析
| 复杂度类型 | 值 |
|---|---|
| 时间复杂度 | O(1) |
| 空间复杂度 | O(1) |