[LeetCode][Database]Consecutive Numbers

题目来源:https://leetcode.com/problems/consecutive-numbers/

这里写图片描述
输出连续三次同样的数字(Id连续,Num相同)
一开始当然还是想用之前的做法,连着join三次:
select distinct a.Num
from Logs a join Logs b join Logs c
on a.Id+2 = b.Id+1 = c.Id and a.Num = b.Num = c.Num
果然超时了,第一次做数据库的题也TLE。。
然后意识到没有必要三重循环的,二重的就够了,先找到对应的b,然后再去找对应的c,复杂度降了一维:
select distinct a.Num
from Logs a
join Logs b on a.Id+1 = b.Id and a.Num = b.Num
join Logs c on a.Id+2 = c.Id and a.Num = c.Num
通过了,时间是1669 ms,不大满意这个结果。毕竟刚刚做过连续两天天气的问题,现在又出现连续三天的问题,如何从暴力解决改进到简便快捷方法呢?
上网之后查到一个解法,先记下来以后研究:
select DISTINCT num
FROM (
select
num,
case when @record = num then @count:=@count+1
when @record <> @record:=num then @count:=1
end as n
from Logs ,(
select
@count:=0,
@record:=(SELECT num from Logs limit 0,1)
) r
) a
where a.n>=3
速度依然很慢。。1680 ms 。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值