【LetMeFly】3516.找到最近的人:计算绝对值大小
力扣题目链接:https://leetcode.cn/problems/find-closest-person/
给你三个整数 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
解题方法:数学
速度相同,路程约长到达越晚。
a和b的路程 = a和b坐标之差的绝对值。
- 时间复杂度O(1)O(1)O(1)
- 空间复杂度O(1)O(1)O(1)
AC代码
C++
/** @Author: LetMeFly* @Date: 2025-09-04 13:33:33* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-09-04 13:36:19*/
class Solution {
public:int findClosest(int x, int y, int z) {int diff = abs(x - z) - abs(y - z);return diff ? diff > 0 ? 2 : 1 : 0;}
};
Python
'''
Author: LetMeFly
Date: 2025-09-04 13:33:33
LastEditors: LetMeFly.xyz
LastEditTime: 2025-09-04 13:37:22
'''
class Solution:def findClosest(self, x: int, y: int, z: int) -> int:diff = abs(x - z) - abs(y - z)return 2 if diff > 0 else 1 if diff else 0
Go
/** @Author: LetMeFly* @Date: 2025-09-04 13:33:33* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-09-04 13:39:11*/
package mainfunc abs3516(a int) int {if a < 0 {return -a}return a
}func findClosest(x int, y int, z int) int {diff := abs3516(x - z) - abs3516(y - z)if diff == 0 {return 0} else if diff > 0 {return 2}return 1
}
Rust
/** @Author: LetMeFly* @Date: 2025-09-04 13:33:33* @LastEditors: LetMeFly.xyz* @LastEditTime: 2025-09-04 13:40:19*/
impl Solution {pub fn find_closest(x: i32, y: i32, z: i32) -> i32 {let diff: i32 = (x - z).abs() - (y - z).abs();if diff == 0 {return 0; // 这里必须带上return} else if diff > 0 {return 2;}1}
}
同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
千篇源码题解已开源