算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个号后续每天带大家做一道算法题,题目就从LeetCode上面选 !今天和大家聊的问题叫做 连续出现的数字  ,我们先来看题面:https://leetcode-cn.com/problems/consecutive-numbers/

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

 

Return the result table in any order.

题意

 

编写一个 SQL 查询,查找所有至少连续出现三次的数字。返回的结果表中的数据可以按 任意顺序 排列。​LeetCode刷题实战180:连续出现的数字_力扣

示例

​LeetCode刷题实战180:连续出现的数字_力扣_02

解题

如果是在Java等编程语言中,直接用for循环遍历一遍基本就出来了,但是在MySQL没有遍历表这种流程控制结构。但我我们可以分析一下编程语言中的过程,首先我们需要一个pre变量记录前面一个值是多少,以及前面那个值连续出现次数。

#对结果进行去重处理
select distinct Num as ConsecutiveNums
#将Num以及连续出现的次数作为一个新表
from (
  #计算Num,到当前遍历的位置连续出现的次数
  select Num, (
      case
      #如果Num == 前一个值,个数自增
      when @prev = Num then @count := @count + 1
      #否则计数器count为1,并更新prev为当前Num的值
      when (@prev := Num) is not null then @count := 1
      end
  ) as CNT
  from Logs, (select @prev := null,@count := null) as t
) as temp
#筛选出连续出现次数超过3的
where temp.CNT >= 3

好了,今天的文章就到这里 。

​LeetCode刷题实战180:连续出现的数字_LeetCode_03