【刷题】【力扣】【180】【中等】连续出现的数字

### 文章目录

  • [@toc](#文章目录 @[toc] 题目描述 示例 输入 输出 解释 MySQL实现 方法1 方法2 Pandas实现)
  • [题目描述](#文章目录 @[toc] 题目描述 示例 输入 输出 解释 MySQL实现 方法1 方法2 Pandas实现)
  • [示例](#文章目录 @[toc] 题目描述 示例 输入 输出 解释 MySQL实现 方法1 方法2 Pandas实现)
  • [输入](#文章目录 @[toc] 题目描述 示例 输入 输出 解释 MySQL实现 方法1 方法2 Pandas实现)
  • [输出](#文章目录 @[toc] 题目描述 示例 输入 输出 解释 MySQL实现 方法1 方法2 Pandas实现)
  • [解释](#文章目录 @[toc] 题目描述 示例 输入 输出 解释 MySQL实现 方法1 方法2 Pandas实现)
  • [MySQL实现](#文章目录 @[toc] 题目描述 示例 输入 输出 解释 MySQL实现 方法1 方法2 Pandas实现)
  • [方法1](#文章目录 @[toc] 题目描述 示例 输入 输出 解释 MySQL实现 方法1 方法2 Pandas实现)
  • [方法2](#文章目录 @[toc] 题目描述 示例 输入 输出 解释 MySQL实现 方法1 方法2 Pandas实现)
  • [Pandas实现](#文章目录 @[toc] 题目描述 示例 输入 输出 解释 MySQL实现 方法1 方法2 Pandas实现)

题目描述


  • 表:Logs
shell 复制代码
+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| num         | varchar |
+-------------+---------+
在 SQL 中, id 是该表的主键
id 是一个自增列
  • 找出所有至少连续出现三次的数字
  • 返回的结果表中的数据可以按任意顺序排列

示例


输入

  • Logs表
shell 复制代码
+----+-----+
| id | num |
+----+-----+
| 1  | 1   |
| 2  | 1   |
| 3  | 1   |
| 4  | 2   |
| 5  | 1   |
| 6  | 2   |
| 7  | 2   |
+----+-----+

输出

shell 复制代码
+-----------------+
| ConsecutiveNums |
+-----------------+
| 1               |
+-----------------+

解释

  • 1 1 1是唯一连续出现至少三次的数字

MySQL实现


方法1

sql 复制代码
select distinct num as ConsecutiveNums
from (select *, lead(rn, 2) over (partition by num order by rn) as rn_lead
      from (select num, row_number() over () as rn from Logs) t1) t2
where rn_lead - rn = 2;

方法2

sql 复制代码
select distinct num as ConsecutiveNums
from (select num,
             row_number() over ()                             as rn1,
             row_number() over (partition by num order by id) as rn2
      from Logs
      order by num, id) t
group by num, rn1 - rn2
having count(rn1 - rn2) >= 3;

Pandas实现


python 复制代码
# -*- coding: utf-8 -*-
# @Time     : 2025/1/12 1:30
# @Author   : 从心
# @File     : 180.py
# @Software : PyCharm

import pandas as pd


def consecutive_numbers(logs: pd.DataFrame) -> pd.DataFrame:
    if logs.empty:
        return pd.DataFrame(columns=['ConsecutiveNums'])

    logs['rn'] = logs.reset_index(drop=True).index + 1

    grouped = logs.groupby('num')
    result = []
    for name, group in grouped:
        group = group.copy()
        group['rn_lead'] = group['rn'].shift(-2)
        result.append(group)

    df = pd.concat(result)
    df = df[df['rn_lead'] - df['rn'] == 2]

    return df['num'].drop_duplicates().to_frame(name='ConsecutiveNums')

相关推荐
andrsted4 小时前
练题簿在线免费刷题:选择、填空、简答与排序,多种题型练出不同的掌握程度
学习·微信小程序·小程序·学习方法·刷题
andrsted15 小时前
练题簿在线免费刷题:Word、PDF 导题与预览补全,把现成资料变成可练习题库
微信小程序·小程序·pdf·word·学习方法·刷题
andrsted2 天前
练题簿在线免费刷题:听读练题支持暂停续播、循环播放,让自己的题库听得更方便
学习·微信小程序·小程序·刷题·在线刷题
蛋蛋的就会顺顺的5 天前
hot100——二叉树
java·数据结构·算法·leetcode·力扣
2601_949950637 天前
练题簿在线免费刷题 从资料整理到考前自测
面试·职场和发展·pdf·word·刷题
2601_949950639 天前
练题簿小程序的 4 个功能,把学习资料变成题库
人工智能·小程序·刷题·练习·小程序推荐
蛋蛋的就会顺顺的10 天前
hot100——矩阵
java·数据结构·算法·leetcode·力扣
2601_9499506310 天前
错题总是反复错?用练题簿在线刷题,把复习重点找出来
人工智能·小程序·刷题·练习·小程序推荐
2601_9499506323 天前
练题簿在线练题全流程:从资料导入到模拟考试与错题复盘
学习·考研·小程序·刷题·小程序推荐
语戚24 天前
力扣 1621. 大小为K的不重叠线段的数目:动态规划(Java 实现)
java·算法·leetcode·动态规划·力扣·dp