3516. 找到最近的人
December 15, 2025 · View on GitHub
题目描述
给你三个整数 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,到达第 3 个人(位置 4)需要 2 步。
- 第 2 个人在位置 7,到达第 3 个人需要 3 步。
由于第 1 个人先到达,所以输出为 1。
示例 2:
输入: x = 2, y = 5, z = 6
输出: 2
解释:
- 第 1 个人在位置 2,到达第 3 个人(位置 6)需要 4 步。
- 第 2 个人在位置 5,到达第 3 个人需要 1 步。
由于第 2 个人先到达,所以输出为 2。
示例 3:
输入: x = 1, y = 5, z = 3
输出: 0
解释:
- 第 1 个人在位置 1,到达第 3 个人(位置 3)需要 2 步。
- 第 2 个人在位置 5,到达第 3 个人需要 2 步。
由于两个人同时到达,所以输出为 0。
提示:
1 <= x, y, z <= 100
解法
方法一:数学
我们计算出第 $1 个人和第 \3a,第 \2 个人和第 \3b$。
- 如果 ,说明两个人同时到达,返回 $0$;
- 如果 ,说明第 $1 个人会先到达,返回 \1$;
- 否则,说明第 $2 个人会先到达,返回 \2$。
时间复杂度 ,空间复杂度 。
Python3
class Solution:
def findClosest(self, x: int, y: int, z: int) -> int:
a = abs(x - z)
b = abs(y - z)
return 0 if a == b else (1 if a < b else 2)
Java
class Solution {
public int findClosest(int x, int y, int z) {
int a = Math.abs(x - z);
int b = Math.abs(y - z);
return a == b ? 0 : (a < b ? 1 : 2);
}
}
C++
class Solution {
public:
int findClosest(int x, int y, int z) {
int a = abs(x - z);
int b = abs(y - z);
return a == b ? 0 : (a < b ? 1 : 2);
}
};
Go
func findClosest(x int, y int, z int) int {
a, b := abs(x-z), abs(y-z)
if a == b {
return 0
}
if a < b {
return 1
}
return 2
}
func abs(x int) int {
if x < 0 {
return -x
}
return x
}
TypeScript
function findClosest(x: number, y: number, z: number): number {
const a = Math.abs(x - z);
const b = Math.abs(y - z);
return a === b ? 0 : a < b ? 1 : 2;
}
Rust
impl Solution {
pub fn find_closest(x: i32, y: i32, z: i32) -> i32 {
let a = (x - z).abs();
let b = (y - z).abs();
if a == b {
0
} else if a < b {
1
} else {
2
}
}
}
JavaScript
/**
* @param {number} x
* @param {number} y
* @param {number} z
* @return {number}
*/
var findClosest = function (x, y, z) {
const a = Math.abs(x - z);
const b = Math.abs(y - z);
return a === b ? 0 : a < b ? 1 : 2;
};
C#
public class Solution {
public int FindClosest(int x, int y, int z) {
int a = Math.Abs(x - z);
int b = Math.Abs(y - z);
return a == b ? 0 : (a < b ? 1 : 2);
}
}