SQL实现LeetCode(180.连续的数字)

作者:Grandyang 时间:2024-01-24 13:45:21 

[LeetCode] 180.Consecutive Numbers 连续的数字

Write a SQL query to find all numbers that appear at least three times consecutively.

+----+-----+
| Id | Num |
+----+-----+
| 1  |  1  |
| 2  |  1  |
| 3  |  1  |
| 4  |  2  |
| 5  |  1  |
| 6  |  2  |
| 7  |  2  |
+----+-----+

For example, given the above Logs table, 1 is the only number that appears consecutively for at least three times.

这道题给了我们一个Logs表,让我们找Num列中连续出现相同数字三次的数字,那么由于需要找三次相同数字,所以我们需要建立三个表的实例,我们可以用l1分别和l2, l3内交,l1和l2的Id下一个位置比,l1和l3的下两个位置比,然后将Num都相同的数字返回即可:

解法一:


SELECT DISTINCT l1.Num FROM Logs l1
JOIN Logs l2 ON l1.Id = l2.Id - 1
JOIN Logs l3 ON l1.Id = l3.Id - 2
WHERE l1.Num = l2.Num AND l2.Num = l3.Num;

下面这种方法没用用到Join,而是直接在三个表的实例中查找,然后把四个条件限定上,就可以返回正确结果了:

解法二:


SELECT DISTINCT l1.Num 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;

再来看一种画风截然不同的方法,用到了变量count和pre,分别初始化为0和-1,然后需要注意的是用到了IF语句,MySQL里的IF语句和我们所熟知的其他语言的if不太一样,相当于我们所熟悉的三元操作符a?b:c,若a真返回b,否则返回c。那么我们先来看对于Num列的第一个数字1,pre由于初始化是-1,和当前Num不同,所以此时count赋1,此时给pre赋为1,然后Num列的第二个1进来,此时的pre和Num相同了,count自增1,到Num列的第三个1进来,count增加到了3,此时满足了where条件,t.n >= 3,所以1就被select出来了,以此类推遍历完整个Num就可以得到最终结果:

解法三:


SELECT DISTINCT Num FROM (
SELECT Num, @count := IF(@pre = Num, @count + 1, 1) AS n, @pre := Num
FROM Logs, (SELECT @count := 0, @pre := -1) AS init
) AS t WHERE t.n >= 3;

参考资料:

https://leetcode.com/discuss/54463/simple-solution

https://leetcode.com/discuss/87854/simple-sql-with-join-1484-ms

https://leetcode.com/discuss/69767/two-solutions-inner-join-and-two-variables

来源:https://www.cnblogs.com/grandyang/p/5354173.html

标签:SQL,连续的数字,LeetCode
0
投稿

猜你喜欢

  • Ubuntu 18.04 安装mysql5.7

    2024-01-26 07:53:09
  • 推荐四款可视化工具(解决99%的可视化大屏需求)

    2022-05-06 03:37:39
  • chatGPT之Python API启用上下文管理案例详解

    2022-09-21 13:51:43
  • 巧用Dreamweaver制作复杂图像

    2010-09-02 12:34:00
  • python脚本实现统计日志文件中的ip访问次数代码分享

    2021-03-17 08:40:08
  • 实例讲解实现SQL下的字符串拆分具体方法

    2008-12-09 14:55:00
  • 手把手带你走进Go语言之类型转换

    2024-02-14 23:25:05
  • 一个20行左右的强$代码

    2009-12-25 15:22:00
  • Python查看Tensor尺寸及查看数据类型的实现

    2023-06-06 15:24:54
  • javascript实现划词标记+划词搜索功能

    2008-02-21 13:20:00
  • Windows mysql命令行导入 .sql文件

    2010-12-03 16:12:00
  • 用户体验如何提升阿里巴巴的商业价值

    2009-07-23 20:29:00
  • Win10环境python3.7安装dlib模块趟过的坑

    2021-03-25 14:09:25
  • Python爬虫制作翻译程序的示例代码

    2023-08-13 06:38:35
  • 史上最简单的MySQL数据备份与还原教程(中)(三十六)

    2024-01-24 08:40:56
  • pip 安装库比较慢的解决方法(国内镜像)

    2022-09-30 04:02:29
  • Python3基础之条件与循环控制实例解析

    2021-08-29 03:02:31
  • 将数据集制作成VOC数据集格式的实例

    2023-05-16 06:00:15
  • Python生成随机验证码的两种方法

    2022-06-27 02:39:56
  • Python中的字符串切片(截取字符串)的详解

    2023-07-23 20:37:59
  • asp之家 网络编程 m.aspxhome.com