题目描述

(通过次数18,448 | 提交次数23,163,通过率79.64%)

表point保存了一些点在 x 轴上的坐标,这些坐标都是整数。
写一个查询语句,找到这些点中最近两个点之间的距离。
| x   |
|-----|
| -1  |
| 0   |
| 2   |
最近距离显然是 '1' ,是点 '-1' 和 '0' 之间的距离。所以输出应该如下:
| shortest|
|---------|
| 1       |
注意:每个点都与其他点坐标不同,表table不会有重复坐标出现。

进阶:如果这些点在 x 轴上从左到右都有一个编号,输出结果时需要输出最近点对的编号呢?

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/shortest-distance-in-a-line
//测试数据
Create Table If Not Exists Point (x int not null);

insert into Point (x) values ('-1');
insert into Point (x) values ('0');
insert into Point (x) values ('2');

解题思路

Point表保存了一组x轴上的点。

题目要求:返回这些点之间的最近距离。

从数学上来说,一条坐标轴上的两个点之间的距离,为这两个坐标之差的绝对值。

那么,首先,我们需要得到这些点的两两组合。

然后,计算出每一个组合的距离值。

最后再得出最小值即可。

参考SQL

未特别说明的情况下,参考SQL为基于MySQL8.0实现。
select
    min(b.x-a.x) shortest
from point a
inner join point b
on a.x < b.x;
picture loss