欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > 力扣2978. 对称坐标

力扣2978. 对称坐标

2024/11/30 9:13:15 来源:https://blog.csdn.net/dhdbanwan/article/details/144084126  浏览:    关键词:力扣2978. 对称坐标

一、数据

2978. 对称坐标

表: Coordinates

+-------------+------+
| Column Name | Type |
+-------------+------+
| X           | int  |
| Y           | int  |
+-------------+------+
每一行包括 X 和 Y,都是整数。表格可能包含重复值。

如果两个坐标 (X1, Y1) 和 (X2, Y2) 满足条件 X1 == Y2 和 X2 == Y1,则它们被称为 对称 坐标。

编写一个解决方案,找出在所有这些对称坐标中,满足条件 X1 <= Y1 的唯一坐标。

按照 X 和 Y 分别 升序 排列结果表。

结果格式如下示例所示。

示例 1:

输入:
Coordinates table:
+----+----+
| X  | Y  |
+----+----+
| 20 | 20 |
| 20 | 20 |
| 20 | 21 |
| 23 | 22 |
| 22 | 23 |
| 21 | 20 |
+----+----+
输出:
+----+----+
| x  | y  |
+----+----+
| 20 | 20 |
| 20 | 21 |
| 22 | 23 |
+----+----+
解释:
- (20, 20) 和 (20, 20) 是对称坐标,因为 X1 == Y2 和 X2 == Y1。所以 (20, 20) 被显示为独特的坐标。
- (20, 21) 和 (21, 20) 是对称坐标,因为 X1 == Y2 和 X2 == Y1。然而,只有 (20, 21) 会被显示,因为 X1 <= Y1。
- (23, 22) 和 (22, 23) 是对称坐标,因为 X1 == Y2 和 X2 == Y1。然而,只有 (22, 23) 会被显示,因为 X1 <= Y1。
输出表按照 X 和 Y 升序排列。

二、分析

本题的解法就是将表格进行自关联,然后让第一个坐标的X值等于第二个坐标的Y值,第一个坐标的Y值等于第二个坐标的X值,且每个坐标的X值小于等于Y值,那么这样就十分简单了,直接进行表关联,然后直接写关联条件即可。

但是!!!

题目本身的意义是将本身数据与表中的其他数据进行关联,而直接进行自关联的话会让自己也关联上了自己,如果坐标的X值和Y值都相等,那么就会出现多余数据,所以我们应该香个办法解决这个问题。

那就是先对表中的数据进行排序处理,然后在关联时,并让数据的排名不相等,这样就不会初夏自己关联自己的情况。

三、代码

with t as (select *,row_number() over () id -- 首先对表中的数据进行排名from coordinates
)selectdistinct c1.X,c1.Y
from t c1
join t c2 on c1.X = c2.Y and c1.Y = c2.X and c1.X<=c1.Y and c1.id<>c2.id -- 关联条件再加上一个排名的id不相等
order by c1.X,c1.Y

四、分析

总体来说,本题难度较小,就是需要注意到自己关联自己的情况。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com