【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和我的個人博客,原創不易,轉載經作者同意后請附上原文鏈接哦~
千篇源碼題解已開源