题解 | #两点间距离#

两点间距离

https://www.nowcoder.com/practice/94712d6f654143379f8ea5847d9d6225

题目链接

两点间距离

题目描述

给定两个在二维平面下的点 point_Apoint_B,你需要计算并返回这两个点之间的直线距离。

  • 题目以核心代码模式提供,你需要实现 calculateDistance 函数。
  • 输入参数是两个 Point 对象,每个对象包含 xy 两个整型坐标。
  • 返回值要求是一个 double 类型的浮点数。

示例: 输入: point_A = (1,1), point_B = (1,8) 输出: 7.0

解题思路

这是一个基础的几何问题,要求计算两点间的欧几里得距离。解决这个问题的关键就是直接应用数学中的距离公式。

对于二维平面上的两个点 ,它们之间的距离 由以下公式给出:

算法步骤如下

  1. 从输入的 Point 对象中分别获取
  2. 计算 坐标的差值
  3. 计算 坐标的差值
  4. 计算上述差值的平方和:
  5. 使用 hypot 函数计算该和的平方根,并将结果返回。

为了数值计算的稳定性和代码的简洁性,可以直接使用 hypot 函数(C++、Java 和 Python 中均有提供),它专门用于计算 ,并且通常比 sqrt(dx*dx + dy*dy) 更精确,可以避免中间计算发生上溢或下溢。

代码

/**
 * struct Point {
 *  int x;
 *  int y;
 *  Point(int xx, int yy) : x(xx), y(yy) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * @param point_A Point类 A点
     * @param point_B Point类 B点
     * @return double浮点型
     */
    double calculateDistance(Point point_A, Point point_B) {
        double dx = point_A.x - point_B.x;
        double dy = point_A.y - point_B.y;
        return hypot(dx, dy);
    }
};
import java.util.*;

/*
 * public class Point {
 *   int x;
 *   int y;
 *   public Point(int x, int y) {
 *     this.x = x;
 *     this.y = y;
 *   }
 * }
 */
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * @param point_A Point类 A点
     * @param point_B Point类 B点
     * @return double浮点型
     */
    public double calculateDistance(Point point_A, Point point_B) {
        double dx = point_A.x - point_B.x;
        double dy = point_A.y - point_B.y;
        // Math.hypot is specifically for sqrt(x^2 + y^2) and is often more accurate.
        return Math.hypot(dx, dy);
    }
}
# class Point:
#     def __init__(self, a=0, b=0):
#         self.x = a
#         self.y = b
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 计算A点与B点之间的距离
# @param point_A Point类 A点
# @param point_B Point类 B点
# @return double浮点型
#
import math
class Solution:
    def calculateDistance(self, point_A: Point, point_B: Point) -> float:
        dx = point_A.x - point_B.x
        dy = point_A.y - point_B.y
        # math.hypot is equivalent to sqrt(x**2 + y**2)
        return math.hypot(dx, dy)

算法及复杂度

  • 算法: 欧几里得距离公式
  • 时间复杂度: 。该计算涉及固定数量的算术运算,不随输入坐标值的大小而改变。
  • 空间复杂度: 。除了存储输入和几个临时变量外,没有使用额外的空间。
全部评论

相关推荐

真tmd的恶心,1.面试开始先说我讲简历讲得不好,要怎样讲怎样讲,先讲背景,再讲技术,然后再讲提升多少多少,一顿说教。2.接着讲项目,我先把背景讲完,开始讲重点,面试官立即打断说讲一下重点,无语。3.接着聊到了项目的对比学习的正样本采样,说我正样本采样是错的,我解释了十几分钟,还是说我错的,我在上一家实习用这个方法能work,并经过市场的检验,并且是顶会论文的复现,再怎么不对也不可能是错的。4.面试官,说都没说面试结束就退出会议,把面试者晾在会议里面,丝毫不尊重面试者难受的点:1.一开始是讲得不好是欣然接受的,毕竟是学习。2.我按照面试官的要求,先讲背景,再讲技术。当我讲完背景再讲技术的时候(甚至已经开始蹦出了几个技术名词),凭什么打断我说讲重点,是不能听出人家重点开始了?这也能理解,每个人都有犯错,我也没放心上。3.我自己做过的项目,我了解得肯定比他多,他这样贬低我做过的项目,说我的工作是错误的,作为一个技术人员,我是完全不能接受的,因此我就和他解释,但无论怎么解释都说我错。凭什么,作为面试官自己不了解相关技术,别人用这个方式work,凭什么还认为这个方法是错的,不接受面试者的解释。4.这个无可厚非,作为面试官,不打招呼就退出会议,把面试者晾着,本身就是有问题。综上所述,我现在不觉得第一第二点也是我的问题,面试官有很大的问题,就是专门恶心人的,总结面试官说教,不尊重面试者,打击面试者,不接受好的面试者,技术一般的守旧固执分子。有这种人部门有这种人怎么发展啊。最后去查了一下,岗位关闭了。也有可能是招到人了来恶心人的,但是也很cs
牛客20646354...:招黑奴啊,算法工程师一天200?
点赞 评论 收藏
分享
挥毫自在:想白嫖你呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务