Leecode 0180. 连续出现的数字
180. 连续出现的数字
表:Logs
1 | +-------------+---------+ |
找出所有至少连续出现三次的数字。
返回的结果表中的数据可以按 任意顺序 排列。
结果格式如下面的例子所示:
示例 1:
1 | 输入: |
解题思路
核心思路是 “通过自连接匹配连续三行的数字”:
由于 id
是自增列,连续出现的数字对应的 id
必然是连续的(如 id=1,2,3
对应连续三行)。通过将 Logs
表与自身进行两次连接,分别匹配 “当前行与下一行”“当前行与下下一行”,筛选出三行 num
完全相同的记录,最后去重得到结果。
具体步骤:
- 三次表连接:将
Logs
表分别作为l1
(当前行)、l2
(下一行,id=l1.id+1
)、l3
(下下一行,id=l1.id+2
); - 筛选连续相同数字:添加条件
l1.num = l2.num AND l2.num = l3.num
,确保三行数字完全一致; - 去重:使用
DISTINCT
避免同一数字因多次连续出现(如连续 4 次)而重复输出。
代码实现
1 | SELECT DISTINCT |
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.