Easy

题目描述

给你三个整数 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,可以用 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. 计算第 1 个人到第 3 个人的距离 dist1 = |x - z|
  2. 计算第 2 个人到第 3 个人的距离 dist2 = |y - z|
  3. 比较两个距离并返回相应结果

这是一个纯数学问题,时间复杂度为 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)