LintCode-Logo 查询相距最近的两棵树苗

简介: 题目的要求就是查询表中距离最近的两棵树之间的距离。并将结果进行重命名(shortest_distance)题解一:(采用聚合函数和自连接)SELECT MIN(ABS(a.distance - b.distance)) AS shortest_distanceFROM sapling_distances AS aINNER JOIN sapling_distances bON a.id != b.id;


题目的要求就是查询表中距离最近的两棵树之间的距离。并将结果进行重命名(shortest_distance)


题解一:(采用聚合函数和自连接)


SELECT MIN(ABS(a.distance - b.distance)) AS shortest_distance
FROM sapling_distances AS a
INNER JOIN sapling_distances b
ON a.id != b.id;


这是一段非常简单易懂的解法,字段并不复杂。


注意的也就是很小的细节。距离的话,采用了求绝对值和外加最小值前提的条件。然后就是自连接查询。自连接查询的条件就是两者的id不相同。如果相同的那么查询距离就没意义了。如果id相同就是比较的是自身。自身和自身有什么好比的呢?


!= 还可以用<>代替。意思一样


题解二:(采用嵌套查询思维)


SELECT MIN(distance_diff) AS shortest_distance FROM (
    SELECT  abs(b.distance - a.distance) AS distance_diff FROM sapling_distances a, sapling_distances b
    WHERE a.id <> b.id
) cc
HAVING shortest_distance is not null;


采用的是嵌套查询的思维,也是非常好理解的。外层对要求结果求最小值,内层对查询距离求绝对值。内存对表的处理就是两次命名表,使之成为不同名表,然后进行附加条件。最后需要注意的就是cc这个作为子查询表的命名,如果没有的话,会报错,这是语法要求。


题解三:(另一种思维模式,其实没什么特别)


select min(a.distance - b.distance) shortest_distance
from sapling_distances a
    join sapling_distances b on a.distance > b.distance
having shortest_distance is not null;


一个限制条件a.distance>b.distance这样就代替了abs()聚合函数,这样也可以正常得到结果。


题解四:(多此一举的解法,简单问题复杂化)


select min(s2.distance-s1.distance) shortest_distance from
(select distance,@rownum1:=@rownum1+1 r1 
from sapling_distances,(select @rownum1:=0) ra
order by distance) s1,
(select distance,@rownum2:=@rownum2+1 r2 
from sapling_distances,(select @rownum2:=0) rb
order by distance) s2
where s1.r1 = s2.r2-1 having shortest_distance is not null;


不做说明,因为我不会。解法摘自网友。对于这种解法真的感觉深恶痛绝。简单问题复杂化,不可为也。好吧!我还没用过这种方法,等学会了再来补充。


相关文章
|
5月前
|
算法
【递归搜索回溯专栏】专题二:二叉树中的深搜----二叉搜索树中第K小的元素
【递归搜索回溯专栏】专题二:二叉树中的深搜----二叉搜索树中第K小的元素
36 0
|
5月前
|
Java C++ Python
leetcode-700:二叉搜索树中的搜索
leetcode-700:二叉搜索树中的搜索
416 0
|
5月前
【每日一题Day212】LC1373二叉搜索子树的最大键值和 | dfs+树形dp
【每日一题Day212】LC1373二叉搜索子树的最大键值和 | dfs+树形dp
27 0
代码随想录Day16 LeetCode T654 最大二叉树 T617 合并二叉树 T700 二叉搜索树中的搜索
代码随想录Day16 LeetCode T654 最大二叉树 T617 合并二叉树 T700 二叉搜索树中的搜索
46 0
|
12天前
【LeetCode 39】700.二叉搜索树中的搜索
【LeetCode 39】700.二叉搜索树中的搜索
11 0
|
4月前
|
存储 算法 Java
广度优先搜索(Breadth-First Search,BFS)是一种用于图的遍历或搜索的算法。
广度优先搜索(Breadth-First Search,BFS)是一种用于图的遍历或搜索的算法。
|
5月前
leetcode700二叉搜索树中的搜索刷题打卡
leetcode700二叉搜索树中的搜索刷题打卡
40 1
|
11月前
|
算法
代码随想录算法训练营第十七天 | LeetCode 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
代码随想录算法训练营第十七天 | LeetCode 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
40 0
|
11月前
|
算法
代码随想录算法训练营第十九天 | LeetCode 654. 最大二叉树、617. 合并二叉树、700. 二叉搜索树中的搜索、98. 验证二叉搜索树
代码随想录算法训练营第十九天 | LeetCode 654. 最大二叉树、617. 合并二叉树、700. 二叉搜索树中的搜索、98. 验证二叉搜索树
55 0
Leedcode二叉搜索树中的搜索[层序遍历+利用性质]
Leedcode二叉搜索树中的搜索[层序遍历+利用性质]
85 0
Leedcode二叉搜索树中的搜索[层序遍历+利用性质]