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 升序排列。
解法
方法一:窗口函数 + 自连接
我们可以使用窗口函数 ROW_NUMBER()
来为每一行添加一个自增的序号,然后再自连接两张表,连接条件为 p1.x = p2.y AND p1.y = p2.x AND p1.x <= p1.y AND p1.id != p2.id
,最后再排序去重即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|