【力扣白嫖日记】180.连续出现的数字

2024-02-26 20:36
文章标签 力扣 连续 数字 日记 180

本文主要是介绍【力扣白嫖日记】180.连续出现的数字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。

今日题目:

180.连续出现的数字
表:Logs

列名类型
idint
numvarchar

找出所有至少连续出现三次的数字。

返回的结果表中的数据可以按 任意顺序 排列。


我那不值一提的想法:

  • 首先梳理表内容,题干一共了一张表,记录了id和数字。
  • 其次分析需求,找出连续出现三次的数字
  • 要实现这个需求,需要满足三个条件
  • 第一个,id不同,num值相同
  • 第二个,id之间差值只能是1
  • 第三个,num的数量得大于等于3
  • 要同时满足上面三个条件,我们可以直接三个表连接
  • 第一个条件和第二个条件,s2.id - s1.id = 1 and s3.id - s2.id = 1 and s1.num = s2.num = s3.num
  • 第三个条件,因为是三个表连接,所以要至少得连续三个及以上的相同数字才能符合条件
select distinct s1.num as ConsecutiveNums
from Logs s1,Logs s2,Logs s3
where s1.num = s2.num 
and s2.num = s3.num
and s1.id + 1 = s2.id
and s2.id + 1 = s3.id

这个答案虽然能解决需求,但是我知道这解法只能解连续3个数连续的,如果有更多的就需要更多的表。于是我在neilsons的题解中学到了更高阶的方法。

  • 首先我们需要知道row_number函数,row_number函数用于为结果集中的行分配一个唯一的连续整数值,比如row_number() over(order by num) as series,就是对num进行排序,并且创建series列,里面对应了num从小到大的排序。
  • 对于这道题我们需要对原始数据进行编号,因为题干中并没有提到id是连续的:
select id,num,row_number() over(order by id) as series
from Logs

在这里插入图片描述

  • 其次我们需要对num进行分组排序
select id,num,row_number() over(partition by num order by id) as series
from Logs

在这里插入图片描述
在这里我们可以看到,只要数字连续相同,它在表中的序列-它第几次出现,是一个定值,也就是这样:

select id,num,row_number() over(order by id)-row_number() over(partition by num order by id) as series3
from Logs

在这里插入图片描述

  • 最后我们将其作为一个临时表,查询这个结果,group by num,series,使数量大于等于3,就能得到最终的结果:
select distinct num as ConsecutiveNums 
from 
(select id,num,
row_number() over(order by id) - row_number() over(partition by num order by id) as series
from Logs
) as a 
group by num,series
having count(*) >=3

引用:

https://leetcode.cn/problems/consecutive-numbers/solutions/21537/sql-server-jie-fa-by-neilsons


结果:

  • 三表连接
    在这里插入图片描述
  • row_number()
    在这里插入图片描述

总结:

能运行就行。


这篇关于【力扣白嫖日记】180.连续出现的数字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/750093

相关文章

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

poj2406(连续重复子串)

题意:判断串s是不是str^n,求str的最大长度。 解题思路:kmp可解,后缀数组的倍增算法超时。next[i]表示在第i位匹配失败后,自动跳转到next[i],所以1到next[n]这个串 等于 n-next[n]+1到n这个串。 代码如下; #include<iostream>#include<algorithm>#include<stdio.h>#include<math.

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

XTU 1233 n个硬币连续m个正面个数(dp)

题面: Coins Problem Description: Duoxida buys a bottle of MaiDong from a vending machine and the machine give her n coins back. She places them in a line randomly showing head face or tail face o

两数之和--力扣1

两数之和 题目思路C++代码 题目 思路 根据题目要求,元素不能重复且不需要排序,我们这里使用哈希表unordered_map。注意题目说了只对应一种答案。 所以我们在循环中,使用目标值减去当前循环的nums[i],得到差值,如果我们在map中能够找到这个差值,就说明存在两个整数的和为目标值。 如果没有找到,就将当前循环的nums[i]以及下标i放入map中,以便后续查

AIGC6: 走进腾讯数字盛会

图中是一个程序员,去参加一个技术盛会。AI大潮下,五颜六色,各种不确定。 背景 AI对各行各业的冲击越来越大,身处职场的我也能清晰的感受到。 我所在的行业为全球客服外包行业。 业务模式为: 为国际跨境公司提供不同地区不同语言的客服外包解决方案,除了人力,还有软件系统。 软件系统主要是提供了客服跟客人的渠道沟通和工单管理,内部管理跟甲方的合同对接,绩效评估,BI数据透视。 客服跟客人

力扣第347题 前K个高频元素

前言 记录一下刷题历程 力扣第347题 前K个高频元素 前K个高频元素 原题目: 分析 我们首先使用哈希表来统计数字出现的频率,然后我们使用一个桶排序。我们首先定义一个长度为n+1的数组,对于下图这个示例就是长度为7的数组。为什么需要一个长度为n+1的数组呢?假如说总共有三个数字都为1,那么我们需要把这个1放在数组下标为3的位置,假如说数组长度为n,对于这个例子就是长度为3,那么它的

180. 連續出現的數字

180. 连续出现的数字 Question 表:Logs +-------------+---------+| Column Name | Type |+-------------+---------+| id | int || num | varchar |+-------------+---------+在 SQL 中,id 是

NC 把数字翻译成字符串

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 有一种将字母编码成数字的方式:‘a’->1, ‘b->2’, … , ‘z->26’。 现在给一串数字,返回有多少种可能的译码结果 import java.u

34465A-61/2 数字万用表(六位半)

34465A-61/2 数字万用表(六位半) 文章目录 34465A-61/2 数字万用表(六位半)前言一、测DC/AC电压二、测DC/AC电流四、测电阻五、测电容六、测二极管七、保存截图流程 前言 1、6位半数字万用表通常具有200,000个计数器,可以显示最大为199999的数值。相比普通数字万用表,6位半万用表具有更高的测量分辨率和更高的测量准确度,适用于精度比较高的测