LeetCode 3516.找到最近的人:计算绝对值大小

【LetMeFly】3516.找到最近的人:计算绝对值大小

力扣题目链接:https://leetcode.cn/problems/find-closest-person/

给你三个整数 xyz,表示数轴上三个人的位置:

  • 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++
cpp 复制代码
/*
 * @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
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
go 复制代码
/*
 * @Author: LetMeFly
 * @Date: 2025-09-04 13:33:33
 * @LastEditors: LetMeFly.xyz
 * @LastEditTime: 2025-09-04 13:39:11
 */
package main

func 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
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和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

相关推荐
小O的算法实验室16 小时前
2026年ASOC,基于深度强化学习的无人机三维复杂环境分层自适应导航规划方法,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
郭涤生17 小时前
STL vector 扩容机制与自定义内存分配器设计分析
c++·算法
༾冬瓜大侠༿17 小时前
vector
c语言·开发语言·数据结构·c++·算法
Ricky111zzz18 小时前
leetcode学python记录1
python·算法·leetcode·职场和发展
汀、人工智能18 小时前
[特殊字符] 第58课:两个正序数组的中位数
数据结构·算法·数据库架构··数据流·两个正序数组的中位数
liu****18 小时前
第16届省赛蓝桥杯大赛C/C++大学B组(京津冀)
开发语言·数据结构·c++·算法·蓝桥杯
汀、人工智能18 小时前
[特殊字符] 第79课:分割等和子集
数据结构·算法·数据库架构·位运算·哈希表·分割等和子集
汀、人工智能18 小时前
[特殊字符] 第74课:完全平方数
数据结构·算法·数据库架构·图论·bfs·完全平方数
CoderCodingNo18 小时前
【GESP】C++四、五级练习题 luogu-P1177 【模板】排序
数据结构·c++·算法
Proxy_ZZ018 小时前
从零实现LDPC比特翻转译码器:C语言实战与底层逻辑解析
c语言·算法