力扣之1285.找到连续区间的开始和结束

ops/2024/10/20 11:29:30/
  • 题目

  • sql建表语句:

  • Create table If Not Exists Logs (log_id int);
    Truncate table Logs;
    insert into Logs (log_id) values ('1');
    insert into Logs (log_id) values ('2');
    insert into Logs (log_id) values ('3');
    insert into Logs (log_id) values ('7');
    insert into Logs (log_id) values ('8');
    insert into Logs (log_id) values ('10');
  • 分析:根据题目,我们可以先按照数字进行排序,然后求出差值来比较,如果差值相同,就证明这几个数字连续,然后按照差值进行分组,找出每个分组中的最大值和最小值来作为结束和开始的数字,这里的排序要用窗口函数中的row_number()来进行排序,图表分析如下:

  • sql实现:

  • with t1 as (select log_id,row_number() over (order by log_id) rn from Logs   -- 按照大小排序
    ),t2 as (select log_id,rn,log_id-rn rn2 from t1    -- 算出差值)
    select distinct min(log_id) over(partition by rn2) start_id,max(log_id) over(partition by rn2) end_id from t2   -- 按照差值分组,取出最小值和最大值作为开始数字和结束数字,然后去重
  • pandas分析和sql分析基本上一样

  • pandas实现:

  • import pandas as pddef find_continuous_ranges(logs: pd.DataFrame) -> pd.DataFrame:logs['rn']=logs['log_id'].rank(ascending=True) -- 排序logs['rn2']=logs['log_id']-logs['rn'] -- 算出差值logs['start_id']=logs.groupby(['rn2'])['log_id'].transform('min') -- 算出最小值logs['end_id']=logs.groupby(['rn2'])['log_id'].transform('max')-- 算出最大值 logs=logs[['start_id','end_id']].drop_duplicates() -- 然后去重return logs
  • 说明一下这里使用transform('min')而不使用min(),是因为前者更像咱们sql中的窗口函数,而后者会出现一个小bug,当全部都是不连续的时候就会返回空值,因此这里使用transform('min')。


http://www.ppmy.cn/ops/121902.html

相关文章

微型导轨在IC制造设备的应用与优势

微型导轨的精度和稳定性对于机器的准确执行任务至关重要,其精确度通常用微米或毫米来衡量。其尺寸可以做到非常小,常运用在小型设备上,尤其是在IC制造设备中,其应用非常广泛。 在IC制造设备中主要用于半导体芯片的切割、封装和测试…

Matlab|计及需求响应消纳风电的电热综合能源系统经济调度

目录 1 主要内容 场景分析 目标函数: 约束条件: 2 部分代码 3 程序结果 4 下载链接 1 主要内容 程序主要参考《计及需求响应消纳风电的电热综合能源系统经济调度》第四章内容,模型负荷侧应用需求响应的基本原理,在日前应用…

如何使用ssm实现基于bootstrap的课程辅助教学网站的设计与实现+vue

TOC ssm782基于bootstrap的课程辅助教学网站的设计与实现vue 第1章 绪论 1.1研究背景与意义 在科学技术水平还比较低下的时期,学校通常采用人工登记的方式对相关的课程信息进行记录,而后对这些信息记录进行管理和控制。这种采用纸质存储信息的管理模…

在 Ubuntu 18.04 上安装 Syncthing

在 Ubuntu 18.04 上安装 Syncthing 是一个简单的过程。Syncthing 提供官方的 apt 仓库,使用该仓库可以方便地安装和更新 Syncthing。 https://syncthing.net/downloads/ 文章目录 安装步骤 1: 添加 Syncthing 官方仓库步骤 2: 安装 Syncthing步骤 3: 启动并运行 S…

Async-Validator——表单验证的艺术

在现代 web 应用开发中,表单验证是一个不可或缺的部分。它确保了用户输入的数据符合预期的格式和规则,从而提高了数据的质量和用户体验。async-validator 是一个强大的 JavaScript 库,它专门用于异步表单验证,被广泛应用于主流 UI…

李宏毅深度学习-梯度下降和Batch Normalization批量归一化

Gradient Descent梯度下降 ▽ -> 梯度gradient -> vector向量 -> 下图中的红色箭头(loss等高线的法线方向) Tip1: Tuning your learning rates Adaptive Learning Rates自适应lr 通常lr会越来越小 Adaptive Learning Rates中每个参数都给它不…

使用 Node.js 创建一个 WebSocket 服务器

使用 Node.js 创建一个 WebSocket 服务器相对简单。你可以使用 ws 库,这是一个流行的 WebSocket 实现。以下是一个基本的步骤来创建一个 WebSocket 服务器: 1.初始化 Node.js 项目: 首先,你需要一个 Node.js 项目。如果你还没有项…

Pikachu-Sql-Inject - 通过sql进行远程服务器控制(试验)

secure_file_priv是MySQL中的系统变量,用于限制文件的读取和写入。 查看命令: show variables like "secure%" //或者 select secure_file_priv; 1.secure_file_priv NULL ,限制文件的读取和写入。 2.secure_file_priv 文件路…