力扣之612.平面上的最近距离

时间:2024-10-28 22:11:15

文章目录

  • 1. 612.平面上的最近距离
    • 1.1 题目说明
    • 1.2 准备数据
    • 1.3 解法
    • 1.4 结果截图

1. 612.平面上的最近距离

1.1 题目说明

Point2D 表:

±------------±-----+
| Column Name | Type |
±------------±-----+
| x | int |
| y | int |
±------------±-----+
(x, y) 是该表的主键列(具有唯一值的列的组合)。
这张表的每一行表示 X-Y 平面上一个点的位置

p1(x1, y1) 和 p2(x2, y2) 这两点之间的距离是 sqrt((x2 - x1)2 + (y2 - y1)2) 。

编写解决方案,报告 Point2D 表中任意两点之间的最短距离。保留 2 位小数 。

返回结果格式如下例所示。

示例 1:

输入:
Point2D table:
±—±—+
| x | y |
±—±—+
| -1 | -1 |
| 0 | 0 |
| -1 | -2 |
±—±—+
输出:
±---------+
| shortest |
±---------+
| 1.00 |
±---------+
解释:最短距离是 1.00 ,从点 (-1, -1) 到点 (-1, 2) 。

1.2 准备数据

Create Table If Not Exists Point2D (x int not null, y int not null)
Truncate table Point2D
insert into Point2D (x, y) values ('-1', '-1')
insert into Point2D (x, y) values ('0', '0')
insert into Point2D (x, y) values ('-1', '-2')

1.3 解法

with t1 as(
    select p1.x as x1,p1.y as y1,p2.x as x2,p2.y as y2 from Point2D p1,Point2D p2
),t2 as (
    select round(sqrt((x2-x1) * (x2-x1) + (y2-y1) * (y2-y1)),2) as sqrt from t1
),t3 as (
    select sqrt,row_number() over (order by sqrt) from t2 where sqrt != 0 limit 1
)
select round(sqrt,2) as shortest from t3

1.4 结果截图

在这里插入图片描述