力扣之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 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.xdnf.cn/news/1555781.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

白板2-数学基础

高斯分布1-极大似然估计 高斯分布2-极大似然估计-无偏&有偏 高斯分布3-从概率密度角度高斯分布4-局限性高斯分布5-边缘概率及条件概率高斯分布6-求联合概率分布

基于SpringBoot vue 医院病房信息管理系统设计与实现

博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php python(flask Django) 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找…

DELL SC compellent存储的四种访问方式

DELL SC存储(国内翻译为 康贝存储,英文是compellent), compellent存储是dell在大概10多年前收购的一家存储,原来这个公司就叫做compellent。 本文的阅读对象是第一次接触SC存储的技术朋友们,如何访问和管理SC存储。总…

一条广告变现3W+,半个月涨粉30W!简直太香了!

今天给大家分享个变现很猛的赛道, 这个赛道,我一开始关注到的时候,是一两个月前吧, 当时看到的时候,相关的笔记流量很猛, 而且相关的账号,起的号也很多, 我当时是看到那么多人都…

《数据结构》--栈【概念应用、图文并茂】

本节讲完栈下次再讲一下队列,最后补充一个串,我们的线性结构基本就完事了。下图中黄色框框圈中的是我们今日份内容(分为两篇博客): 知识体系图 栈(Stack-LIFO)结构 栈的基础概念 栈(Stack)是一个后进先出(Last-In-First-Out)的一个特殊数据…

五种IO模型与阻塞IO

一、前言 在网络中通信的本质其实是网络中的两台主机的进程间进行通信,而进程通信的本质就是IO。 IO分为输入(input)和输出(output)站在进程的角度讲,进程出去数据为输出,外部数据进入进程为输…

ubunut声卡配置 播放视频没有声音的解决方法 alsamixer和pavucontrol的使用方法

文章目录 🌙ubuntu22.04网页没有声音,声卡提示Dummy Output🌙方法一:切换内核🌙方法二:使用知乎的方法 🌙ubuntu22.04 连接蓝牙耳机,1秒后断连解决方法ubuntu声音操作alsamixerpavuc…

边缘计算插上AI的翅膀会咋样?

人工智能(Artificial Intelligence,AI)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学,是新一轮产业革命的重要驱动力量。2022年底发布的ChatGPT将人工智能技术上升到了一个新的高度。如今&#x…

17岁孩子开发AI应用,4个月入百万,人人都是AI产品经理的时代快来了

随着AI时代的到来叠加经济下行,越来越多的独立开发者梦想着实现年入百万的壮举。 近日,这种小概率事件正在发生。 17岁高中生做了个AI APP,短短四个月销售额达100 万美元。 小伙儿Zach Yadegari(下面暂称小扎克)在X…

用IMX6UL开发板编写按键输入实验

在之前我们都是讲解如何使用IMX6UL的GPIO输出控制等功能,IMX6U的IO不仅能作为输出,而且也可以作为输入,而我们开发板上具有一个按键,按键肯定是连接了一个IO口的额,我们在这一节将会把IO配置成输入功能,读取…

codetop标签动态规划大全C++讲解(三)!!动态规划刷穿地心!!学吐了家人们o(╥﹏╥)o

每天复习一篇,只有十题左右 1.买卖股票的最佳时机2.买卖股票的最佳时机含手续费3.买卖股票的最佳时机III4.买卖股票的最佳时机IV5.打家劫舍6.打家劫舍II7.不同路径8.不同路径II9.最小路径和10.三角形的最小路径和11.两个字符串的删除操作12.编辑距离13.一和零 1.买卖…

强化学习笔记之【DDPG算法】

强化学习笔记之【DDPG算法】 文章目录 强化学习笔记之【DDPG算法】前言:原论文伪代码DDPG算法DDPG 中的四个网络代码核心更新公式 前言: 本文为强化学习笔记第二篇,第一篇讲的是Q-learning和DQN 就是因为DDPG引入了Actor-Critic模型&#x…

Ubuntu22.04 Docker 国内安装最靠谱教程

目前docker在国内安装常存在众所周知的网络问题,如果安装过程如果从官网地址安装以及安装之后从官网要拉取镜像都存在问题。这篇文章主要针对这两个问题总结最靠谱的docker安装教程。 1. docker安装 1.1 系统环境概述 Ubuntu 22.04linux内核版本 6.8(…

重学SpringBoot3-集成Redis(四)之Redisson

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(四)之Redisson 1. 添加 Redisson 依赖2. 配置 Redisson 客户端3. 使用 Redisson 实现分布式锁4. 调用分布式锁5. 为什…

二进制的神奇操作——拆位法和贡献思想

拆位的引入 我们来思考这么一个问题,如果给你一个数组,让你去求一个数组里面所有连续子串的异或和的和,问你该怎么求? 我们该如何去处理,首先肯定是会想到暴力的思路,第一层循环遍历左端点,第…

SpringBoot在线教育平台:设计与实现的深度解析

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

654、最大二叉树

1、题目描述 . - 力扣(LeetCode) 其实就是给定了一个所谓"最大二叉树"的规则,让我们去构建二叉树。 以 nums [3,2,1,6,0,5] 为例,规则如下: (1)找出其中的最大值6将其作为根节点,6前面的是左子…

程序传入单片机的过程,以Avrdude为例分析

在市场上有各式各样的单片机,例如Arduino,51单片机,STM等。通常,我们都用其对应的IDE软件进行单片机的编程。这些软件既负责将程序代码转写成二进制代码,即机器语言,也负责将该二进制代码导入单片机。与此同…

C++ 算法学习——7.4.1 优化算法——双指针

双指针法(Two Pointers)是一种常用的算法技巧,通常用于解决数组或链表中的问题。这种技巧通过维护两个指针,通常分别指向数组或链表的不同位置,来协同解决问题。双指针法一般有两种类型:快慢指针和左右指针…

什么是transformer大模型,答案就在这里

Transformer大模型是一种在自然语言处理(NLP)领域中广泛使用的模型,其详细数据与分析可以从以下几个方面进行阐述: 1. 模型架构 Transformer模型本质上是一个Encoder-Decoder架构。编码组件由多层编码器(Encoder&…