当前位置: 首页 > article >正文

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

  • 题目

  • 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 pd
    
    def 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.kler.cn/news/339054.html

相关文章:

  • DolphinScheduler 资源中心无法上传大文件
  • 收藏等于吃灰?SuperMemory:让信息不再迷失
  • JavaScript 标准化的脚本语言规范
  • 多端同步的收银系统源码
  • 通讯方面的数据,人工智能 机器学习的时候,因为数字都接近于一,数据归一化的一种方法,做了一个简化版本的Z-score标准化
  • Reactor 模式
  • Linux文件属性
  • YOLO 二元分类器
  • String、StringBuilder
  • 『网络游戏』窗口基类【06】
  • C++ 双端队列(deque)的深入理解
  • 【JavaEE】【多线程】Thread类讲解
  • Linux系统编程—I/O缓冲区(C语言实现)
  • 【Java 并发编程】多线程安全问题(上)
  • 【C++打怪之路Lv7】-- 模板初阶
  • Git管理远程仓库
  • Windows系统编程(三)线程并发
  • [SQL] 数据定义语言
  • 23.1 k8s监控中标签relabel的应用和原理
  • vulnhub靶场之hackableIII