0
点赞
收藏
分享

微信扫一扫

LeetCode(数据库)- 连续出现的数字


题目链接:​​点击打开链接​​


题目大意:略。


解题思路:

  • 解决方案(1):自定义变量,这里有个小技巧,写变量表达式的时候,不要写在一行,把从左到右转换成从上到下的顺序来看会比较好理解;"IF(@n=num, NULL, @cnt:=1)"这一句比较关键,这里的 NULL 是真的为了满足表达式而已,没啥卵用,主要是为了不相等的时候初始化数据罢了
  • 解决方案(2):自连接,"l1.Id = l2.Id - 1 AND l2.Id = l3.Id - 1" 估计这一句比较难理解,意思是"l1.Id + 1 = l2.Id AND l2.Id + 1 = l3.Id" 这样看是不是小伙伴恍然大悟了呢~


AC 代码

-- 解决方案(1)
SELECT DISTINCT rs.num AS ConsecutiveNums
FROM (SELECT
num,
IF(@n=num, NULL, @cnt:=1),
@cnt:=IF(@n=num, @cnt+1, @cnt) AS `cnt`,
@n:=num
FROM Logs, (SELECT @cnt:=1, @n:=NULL) init) rs
WHERE rs.cnt>=3

-- 解决方案(2)
SELECT DISTINCT
l1.Num AS ConsecutiveNums
FROM
Logs l1,
Logs l2,
Logs l3
WHERE
l1.Id = l2.Id - 1
AND l2.Id = l3.Id - 1
AND l1.Num = l2.Num
AND l2.Num = l3.Num
;


举报

相关推荐

0 条评论