天道酬勤,学无止境

数据库刷题笔记1

目录

    • 简化等值查询
    • mysql中limit和offset的用法
    • LIMIT 分页查询
    • In 与 exists 的区别
        • IN 语句:只执行一次
        • EXISTS语句:执行student.length次
        • 区别及应用场景
        • not in 和not exists
    • 日期函数格式转换
    • 开窗函数
      • 函数简介
      • 语法简介
    • 聚合函数
    • 排名函数

简化等值查询

多表连接查询,且去掉重复列,使用 USING()

select * from school left join course USING (courseid) 
#相当于
select * from school left join course on school.courseid=course.courseid;

mysql中limit和offset的用法

mysql里分页一般用limit来实现,例如:

1、select* from user limit 3;

表示直接取前三条数据

2、select * from user limit 1,3;

表示取2,3,4三条条数据

3、select * from user limit 3 offset 1;

表示取2,3,4三条条数据

解释:

1、当 limit后面跟一个参数的时候,该参数表示要取的数据的数量

例如 select* from user limit 3; 表示直接取前三条数据

2、当limit后面跟两个参数的时候,第一个数表示要跳过的数量,后一位表示要取的数量,例如

select * from user limit 1,3;

就是跳过1条数据,从第2条数据开始取,取3条数据,也就是取2,3,4三条数据

3、当 limit和offset组合使用的时候,limit后面只能有一个参数,表示要取的的数量,offset表示要跳过的数量 。

例如select * from user limit 3 offset 1;
表示跳过1条数据,从第2条数据开始取,取3条数据,也就是取2,3,4三条数据

LIMIT 分页查询

方法)LIMIT

SELECT *
FROM employees
LIMIT 5,5

LIMIT 语句结构: LIMIT X,Y

  • Y :返回几条记录
  • X:从第几条记录开始返回(第一条记录序号为0,默认为0)

分页查询employees表,每5行一页,返回第2页的数据
一般分页使用 order by + limit 。如要求5行/页,则第二页显示第6-10行。

1.limit x,y x:偏移量 y:要获取的个数
limit 5,5; 偏移量为5,取5条记录
2.limit y offset x
limit 5 offset 5; 取5条记录,偏移量为5

select * from employees
order by emp_no
limit 5,5;

拓展:若每页显示n条记录,要显示第i页数据,则可以用 limit n*(i-1),n
因此,得到如下代码

> select * from
> employees order by emp_no limit 5*(2-1),5;

In 与 exists 的区别

IN 语句:只执行一次

确定给定的值是否与子查询或列表中的值相匹配。in在查询的时候,首先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。所以相对内表比较小的时候,in的速度较快。

EXISTS语句:执行student.length次

指定一个子查询,检测行的存在。遍历循环外表,然后看外表中的记录有没有和内表的数据一样的。匹配上就将结果放入结果集中

区别及应用场景

in 和 exists的区别: 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in, 反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。其实我们区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系了 ,另外IN时不对NULL进行处理。

in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。

not in 和not exists

如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。

日期函数格式转换

DATE_FORMAT(date,format)

DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。
date 参数是合法的日期。format 规定日期/时间的输出格式。
可以使用的格式有:

常用格式对应描述
%Y–年,4 位
%m–月,数值(00-12)
%M–月名
%k–小时(0-23)
  • %Y 四位数字表示的年份
  • %y 两位数字表示的年份
  • %m 两位数字表示的月份( 01, 02, . . ., 12)
  • %d 两位数字表示月中的天数( 00, 01, . . ., 31)

开窗函数

函数简介

MySQL从8.0开始支持开窗函数,这个功能在大多商业数据库中早已支持,也叫分析函数;

开窗函数与分组聚合比较像,分组聚合是通过制定字段将数据分成多份,每一份执行聚合函数,每份数据返回一条结果;

开窗函数也是通过指定字段将数据分成多份,也就是多个窗口,对每个窗口的每一行执行函数,每个窗口返回等行数的结果;

窗口函数分为静态窗口和滑动窗口,静态窗口的大小是固定的,滑动窗口的大小可以根据设置进行变化,在当前窗口下生成子窗口。

语法简介

语法:函数名([参数]) over(partition by [分组字段] order by [排序字段] asc/desc rows/range between 起始位置 and 结束位置)

函数解读 函数分为两个部分,函数名称 + over()语句

# 函数名称 + over(...)
开窗函数(字段) over(partition by 分组字段 order by 排序字段 range between 起始位置 and 结束位置)

第一部分是函数名称,开窗函数的数量较少,只有11个窗口函数+聚合函数*(所有聚合函数都可以用作开窗函数)*,根据函数性质,有的要写参数,有的不需要写参数;
按照功能划分,可以把MySQL支持的窗口函数分为如下几类:

  • 所有聚合函数:如sum()/avg()/count()/max()/min()/…
  • 序号函数:row_number() / rank() / dense_rank()
  • 分布函数:percent_rank() / cume_dist()
  • 前后函数:lag()/ lead()
  • 头尾函数:first_val() / last_val()
  • 其他函数:nth_value() / nfile()

第二部分是over语句,over()是必须要写的,里面有三个参数,都是非必须参数,根据需求选写:

  1. 第一个参数是 partition by +分组字段,将数据根据此字段分成多份,如果不加partition by参数,那会把整个数据当做一个窗口。
  2. 第二个参数是 order by +排序字段,每个窗口的数据要不要进行排序
  3. 第三个参数 rows/range between 起始位置 and 结束位置,这个参数仅针对滑动窗口函数有用,是在当前窗口下分出更小的子窗口。其中起始位置和结束位置可写:current row
    边界是当前行,unbounded preceding 边界是分区中的第一行,unbounded following
    边界是分区中的最后一行,expr preceding 边界是当前行减去expr的值,expr following
    边界是当前行加上expr的值。rows是基于行数,range是基于值的大小,到讲解到滑动窗口函数时再详细介绍。

最差是第几名(一)题解
本题出题的题意其实主要是考察sum() over (order by ) 开窗函数,sum(a) over (order by b) 的含义是:
例如
a b
1 2
3 4
5 6
按照b列排序,将a依次相加,得到结果,如下:
a b sum(a) over (order by b):
1 2 1
3 4 1+3
5 6 1+3+5

此题就是将b换成了grade,即使b列乱序也没关系,因为有order by b:
number grade sum(number) over(order by grade):
2 A 2
2 B 2+2
2 C 2+2+2
1 D 2+2+2+1

聚合函数

group_concat()函数将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )

排名函数

在这里插入图片描述

select emp_no, salary, dense_rank() over (order by salary desc) as t_rank
from salaries
order by t_rank, emp_no

ROW_NUMBER():行号。SQL Server2005中,使用ROW_NUMBER()非常方便

SELECT  * , ROW_NUMBER() OVER ( ORDER BY createTime) AS 行号
FROM  表名

备注:数据在排行号时已经排序,如果有根据行号分页的显示,注意ORDER BY排序

RANK():rank函数用于返回结果集的分区内每行的排名

select RANK() OVER(order by [id]) as rank,* from 表名

备注:RANK() 排名,如果OVER后排序后,有(id)值相同,会排名相同,后续排名,将按照记录数排名号排下一个。例如,成绩,1个第一名(排名序号1),2个第二名分数相同(排名序号都是2),第3名(排名序号4)

DENSE_RANK() :dense_rank函数的功能与rank函数类似. 区别:dense_rank函数在生成序号时是连续的

select DENSE_RANK() OVER(order by [id]) as den_rank,* from 表名

NTILE():ntile函数可以对序号进行分组处理,将有序分区中的行分发到指定数目的组中

select NTILE(3) OVER(order by [id] desc) as ntile,* from 表名

sql server的随机函数**newID()**和RAND()

备注:newid():随机函数, 在扫描每条记录的时候都生成一个值, 而生成的值是随机的, 没有大小写顺序

SELECT * FROM Northwind..Orders ORDER BY NEWID()
--随机排序
SELECT TOP 10 * FROM Northwind..Orders ORDER BY NEWID()
--从Orders表中随机取出10条记录

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 刷题笔记:PAT&Leetcode
    https://github.com/sherpahu/AlgorithmsNotes 包含STL的梳理,常考题型(动态规划、图论、搜索等)的整理。 希望能对您C++11的STL语法复习和机试知识点的复习起到帮助! 顺便求几个star 😃 刷题笔记:C++基础知识——STL之algorithm.md 刷题笔记:C++基础知识——STL之heap.md 刷题笔记:C++基础知识——STL之list.md 刷题笔记:C++基础知识——STL之map.md 刷题笔记:C++基础知识——STL之pair&tuple.md 刷题笔记:C++基础知识——STL之queue&priority_queue.md 刷题笔记:C++基础知识——STL之set.md 刷题笔记:C++基础知识——STL之stack.md 刷题笔记:C++基础知识——STL之string.md 刷题笔记:C++基础知识——STL之vector.md 刷题笔记:C++基础知识——STL之其他(fill,sort) (1).md 刷题笔记:C++基础知识——STL之其他(fill,sort).md 刷题笔记:C++基础知识——STL常用函数.md 刷题笔记:C++基础知识——分治.md 刷题笔记:C++基础知识——动态规划.md 刷题笔记:C++基础知识——双指针.md 刷题笔记:C++基础知识——图之拓扑排序.md 刷题笔记
  • 算法笔记(胡凡)刷题笔记目录
    文章目录 胡凡算法笔记刷题笔记目录,待更新...《算法笔记》第三章、入门模拟《算法笔记》第四章、算法初步《算法笔记》第五章、数学问题《算法笔记》第六章、C++标准模板库(STL)介绍《算法笔记》第七章、数据结构专题(1)《算法笔记》第八章、搜索专题《算法笔记》第九章、数据结构专题(2) 胡凡算法笔记刷题笔记目录,待更新… 《算法笔记》第三章、入门模拟 《算法笔记》3.1小节——入门模拟->简单模拟 《算法笔记》3.2小节——入门模拟->查找元素 《算法笔记》3.3小节——入门模拟->图形输出 《算法笔记》3.4小节——入门模拟->日期处理 《算法笔记》3.5小节——入门模拟->进制转换 《算法笔记》3.6小节——入门模拟->字符串处理 《算法笔记》第四章、算法初步 《算法笔记》4.1小节——算法初步->排序 《算法笔记》4.2小节——算法初步->哈希 《算法笔记》4.3小节——算法初步->递归 《算法笔记》4.4小节——算法初步->贪心 《算法笔记》4.5小节——算法初步->二分 《算法笔记》4.6小节——算法初步->two pointers 《算法笔记》4.7小节——算法初步->其他高效技巧与算法 《算法笔记》第五章、数学问题 《算法笔记》5.1小节——数学问题->简单数学 《算法笔记》5.2小节——数学问题->最大公约数与最小公倍数 《算法笔记》5.3小节——数学问题-
  • 北大学霸的LeetCode刷题笔记V4.1(完整版)
    1.1个月200道LeetCode,命中80%,北大学霸的刷题笔记火了 2.北大学霸的LeetCode刷题笔记V4.1(完整版)3.GitHub疯传,FB大佬的LeetCode刷题笔记火了!最近,北大学霸的LeetCode刷题笔记在GitHub上疯传!已经有不少人靠它手撕算法题,拿下了字节、腾讯等大厂offer! △1个月200道LeetCode无压力 △手撕1800道算法题 不问不知道,这份刷题笔记来自FB高级架构师、ACM金牌选手令狐冲之手。 令狐老师在刷题和打ACM比赛中总结出了经验和套路,又疯狂爆肝3个月,对面试中的常考算法知识点给出通用解题思路和代码模板,已经有不少人通过这份小抄逆风翻盘。 刷题3遍,不如九章算法“模板”过一遍 在字节面试中,老K遇到了一道他在《九章算法班 2021版》看到过的原题。主讲老师令狐冲说,这题近半年在字节跳动算法面试环节出现频率高达10次以上。 当时还不相信,没想到真的有狗屎运。立马套用了令狐冲老师的“万金油”解题模板秒掉了**。** 扫二维码,免费报名,获取更多模板 **👇 ** 戳我免费报名 获取更多模板 用九章算法模板写的Code 戳我BATJ算法【小抄】免费领取 算法和数据结构的使用条件、复杂度、万用模板 BATJ等互联网大厂适用,上岸快人一步 算法面试“作弊”解法 切勿盲目刷题,这些题不考 算法≠算法面试,内容那么多,常考的却不多
  • 数据结构与算法邹永林PDF_字节总监首发1121道LeetCode算法刷题笔记(含答案)
    关于算法刷题的困惑和疑问也经常听朋友们提及。这份笔记里面共包含作者刷LeetCode算法题后整理的数百道题,每道题均附有详细题解过程。很多人表示刷数据结构和算法题效率不高,甚是痛苦。有了这个笔记的总结,对校招和社招的算法刷题帮助之大不言而喻,果断收藏了。 非常值得一刷的LeetCode LeetCode刷题目录 思维导图 需要LeetCode刷题笔记PDF手册的小伙伴点击传送门:LeetCode算法学习笔记获取地址 最易懂的贪心算法 算法解释分配问题区间问题练习 玩转双指针 算法解释分配问题区间问题练习 居合斩!二分查找 算法解释求开方查找区间旋转数组查找数字练习 千奇百怪的排序算法 常用排序算法快速选择桶排序练习 一切皆可搜索 算法解释深度优先搜索回溯法广度优先搜索练习 深入浅出动态规划 算法解释基本动态规划: -维基本动态规划:二维分割类型题子序列问题背包问题字符串编辑股票交易练习 化繁为简的分治法 算法解释表达式问题练习 巧解数学问题 引言公倍数与公因数质数数字处理随机与取样练习 神奇的位运算 常用技巧位运算基础问题二进制特性练习 妙用数据结构 C++ STL数组栈和队列单调栈优先队列双端队列哈希表多重集合和映射前缀和与积分图练习 令人头大的字符串 引言字符串比较字符串理解字符串匹配练习 链表、树、图
  • 字节面试题泄露?字节技术总监亲手整理:LeetCode1000+刷题笔记(含答案)
    关于算法刷题的困惑和疑问也经常听朋友们提及。这份笔记里面共包含作者刷LeetCode算法题后整理的数百道题,每道题均附有详细题解过程。很多人表示刷数据结构和算法题效率不高,甚是痛苦。有了这个笔记的总结,对校招和社招的算法刷题帮助之大不言而喻,果断收藏了。 非常值得一刷的LeetCode LeetCode刷题目录 思维导图 需要LeetCode刷题笔记PDF手册的小伙伴帮忙一键三连后,见下图加小助理VX(gyhycx7980)即可免费获取到! 最易懂的贪心算法 算法解释分配问题区间问题练习 玩转双指针 算法解释分配问题区间问题练习 居合斩!二分查找 算法解释求开方查找区间旋转数组查找数字练习 千奇百怪的排序算法 常用排序算法快速选择桶排序练习 一切皆可搜索 算法解释深度优先搜索回溯法广度优先搜索练习 深入浅出动态规划 算法解释基本动态规划: -维基本动态规划:二维分割类型题子序列问题背包问题字符串编辑股票交易练习 化繁为简的分治法 算法解释表达式问题练习 巧解数学问题 引言公倍数与公因数质数数字处理随机与取样练习 神奇的位运算 常用技巧位运算基础问题二进制特性练习 妙用数据结构 C++ STL数组栈和队列单调栈优先队列双端队列哈希表多重集合和映射前缀和与积分图练习 令人头大的字符串 引言字符串比较字符串理解字符串匹配练习 链表、树、图
  • 这也太赞了!字节总监首发1121道LeetCode算法刷题笔记(含答案)史上最强,没有之一!
    关于算法刷题的困惑和疑问也经常听朋友们提及。这份笔记里面共包含作者刷LeetCode算法题后整理的数百道题,每道题均附有详细题解过程。很多人表示刷数据结构和算法题效率不高,甚是痛苦。有了这个笔记的总结,对校招和社招的算法刷题帮助之大不言而喻,果断收藏了。 非常值得一刷的LeetCode LeetCode刷题目录 思维导图 由于笔记的内容太多,没办法全部展示出来,下面只截取部分内容展示。需要LeetCode刷题笔记PDF手册,一键三连后添加小助理VX:msbjy2019即可哦 最易懂的贪心算法 算法解释分配问题区间问题练习 玩转双指针 算法解释分配问题区间问题练习 居合斩!二分查找 算法解释求开方查找区间旋转数组查找数字练习 千奇百怪的排序算法 常用排序算法快速选择桶排序练习 一切皆可搜索 算法解释深度优先搜索回溯法广度优先搜索练习 深入浅出动态规划 算法解释基本动态规划: -维基本动态规划:二维分割类型题子序列问题背包问题字符串编辑股票交易练习 化繁为简的分治法 算法解释表达式问题练习 巧解数学问题 引言公倍数与公因数质数数字处理随机与取样练习 神奇的位运算 常用技巧位运算基础问题二进制特性练习 妙用数据结构 C++ STL数组栈和队列单调栈优先队列双端队列哈希表多重集合和映射前缀和与积分图练习 令人头大的字符串 引言字符串比较字符串理解字符串匹配练习 链表、树、图
  • GitHub疯传!北大学霸的LeetCode刷题笔记火了!
    最近,北大学霸的LeetCode刷题笔记在GitHub上疯传!已经有不少人靠它手撕算法题,拿下了FB、亚麻等大厂offer! △1个月200道LeetCode无压力 不问不知道,这份刷题笔记来自FB高级架构师、ACM金牌选手令狐冲之手。 令狐老师在刷题和打ACM比赛中总结出了经验和套路,又疯狂爆肝3个月,对面试中的常考算法知识点给出通用解题思路和代码模板,已经有不少人通过这份小抄逆风翻盘。 戳我免费试听 获取算法模板 刷题3遍,不如九章算法“模板”过一遍 在FB面试中,Joy遇到了一道他在《九章算法班 2021版》看到过的原题。主讲老师令狐冲说,这题近半年在Facebook的算法面试环节出现频率高达10次以上。 当时还不相信,没想到真的有狗屎运。立马套用了令狐冲老师的“万金油”解题模板秒掉了**。** 用九章算法模板 写的Code FLAG算法【小抄】免费领取 **FLAG一线大厂算法小抄(共38页) 算法和数据结构的使用条件、复杂度、万用模板 FLAG等互联网大厂适用,上岸快人一步 万用刷题模板,算法面试“作弊”解法 切勿盲目刷题,这些题不考 算法≠算法面试,内容那么多,常考的却不多,很多同学明明刷了500+的题,但面试中依然跪,主要就是没刷到重点。 为了让大家更有针对性、更高效的去刷题,《九章算法班》的令狐冲老师已经划分好了大厂面试中最常考的算法和数据结构,颜色越红考的越多
  • GitHub疯传,FB大佬的LeetCode刷题笔记火了!
    最近,北大学霸的LeetCode刷题笔记在GitHub上疯传!已经有不少人靠它手撕算法题,拿下了字节、腾讯等大厂offer! △1个月200道LeetCode无压力 △手撕1800道算法题 不问不知道,这份刷题笔记来自FB高级架构师、ACM金牌选手令狐冲之手。 令狐老师在刷题和打ACM比赛中总结出了经验和套路,又疯狂爆肝3个月,对面试中的常考算法知识点给出通用解题思路和代码模板,已经有不少人通过这份小抄逆风翻盘。 刷题3遍,不如九章算法“模板”过一遍 在字节面试中,老K遇到了一道他在《九章算法班 2021版》看到过的原题。主讲老师令狐冲说,这题近半年在字节跳动算法面试环节出现频率高达10次以上。 当时还不相信,没想到真的有狗屎运。立马套用了令狐冲老师的“万金油”解题模板秒掉了。 《九章算法2021》直击大场面试!8周时间精通大厂算法面试高频考点,9 招击破 BATJ 面试题,算法面试从容应对! 戳我免费试听~领取更多算法模板! 用九章算法模板写的Code 私我【Github】免费领取~ 算法和数据结构的使用条件、复杂度、万用模板 切勿盲目刷题,这些题不考 算法≠算法面试,内容那么多,常考的却不多,很多同学明明刷了500+的题,但面试中依然跪,主要就是没刷到重点。 为了让大家更有针对性、更高效的去刷题,《九章算法班》的令狐冲老师已经划分好了大厂面试中最常考的算法和数据结构
  • 【全网首发】字节跳动总监手撸这份1121道LeetCode算法刷题笔记(含答案),在GitHub上已标星75.8K
    关于算法刷题的困惑和疑问也经常听朋友们提及。这份笔记里面共包含作者刷LeetCode算法题后整理的数百道题,每道题均附有详细题解过程。很多人表示刷数据结构和算法题效率不高,甚是痛苦。有了这个笔记的总结,对校招和社招的算法刷题帮助之大不言而喻,果断收藏了。 非常值得一刷的LeetCode LeetCode刷题目录 思维导图 需要LeetCode刷题笔记PDF手册的小伙伴可以一键三连之后见下图添加小助手微信【bj070701】即可免费获取到了 最易懂的贪心算法 算法解释分配问题区间问题练习 玩转双指针 算法解释分配问题区间问题练习 居合斩!二分查找 算法解释求开方查找区间旋转数组查找数字练习 千奇百怪的排序算法 常用排序算法快速选择桶排序练习 一切皆可搜索 算法解释深度优先搜索回溯法广度优先搜索练习 深入浅出动态规划 算法解释基本动态规划: -维基本动态规划:二维分割类型题子序列问题背包问题字符串编辑股票交易练习 化繁为简的分治法 算法解释表达式问题练习 巧解数学问题 引言公倍数与公因数质数数字处理随机与取样练习 神奇的位运算 常用技巧位运算基础问题二进制特性练习 妙用数据结构 C++ STL数组栈和队列单调栈优先队列双端队列哈希表多重集合和映射前缀和与积分图练习 令人头大的字符串 引言字符串比较字符串理解字符串匹配练习 链表、树、图
  • GitHub最强算法刷题笔记:手撕算法面试,连拿5个offer!
    前阵子逛GitHub时,Clay无意中看到一位大佬的算法刷题笔记,里面包含各种模板,质量高到连身边的算法大神都说写不出比这个更好的了… 正好Clay最近在准备面试,于是他就花了一个多月的时间用来刷题背模板,不试不知道,面试中有很多题都可以套模板,全程有种手撕算法面试的感觉,顺利拿下5个offer! Clay拿到的手册其实就是令狐老师爆肝数月整理出来的算法模板,什么**算法解题套路、万用公式一应俱全,简直就是“作弊神器”,今天免费分享给大家 《大厂常考算法Cheat Sheet 4.1》 内含各类常考算法模板及使用条件: ⼆分法 Binary Search 排序算法 Sorting 宽度优先搜索 BFS等 部分截图,戳我试听获取 带着“答案”去面试,面试官当场定offer 之前有学员在面uber时,直接套用令狐老师的算法模板秒了面试题,宛如带着“答案”在面试… 令狐老师刷题超过3000+,他总结出的模板和套路属于高浓缩的“精华”,这些模板总能让面试官眼前一亮。 令狐老师总结的算法模板👇 除了二分法,令狐老师还整理了快排、双指针、BFS、DFS、DP等各类面试高频算法模板,碰到符合的使用条件,面试直接套用就完事了! 戳我报名试听 白嫖算法模板 切勿盲目刷题,这些题不考 为了让大家有针对性的刷题,**《九章算法班》**的主讲令狐冲老师,划分出大厂面试中最常考的算法和数据结构
  • 剑指Offer刷题笔记 37 / LeetCode刷题笔记 297 java实现
    题目:序列化二叉树 请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过某种符号表示空节点(#),结点的数值之间用一个特殊字符(如’,’)隔开。 二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。 答案: 我们知道可以从前序遍历序列和中序遍历序列中构造出一棵二叉树,但是该方法要求二叉树中不能有数值重复的结点,而且需要两个序列中所有数据读出后才能开始反序列化。 图中的二叉树可以按照前序遍历被序列化成字符串“1,2,4,#,#,#,3,5,#,#,6,#,#” 我们接着以字符串“1,2,4,#,#,#,3,5,#,#,6,#,#”为例分析如何反序列化二叉树。 第一个读出的数字是1,由于前序遍历是从根节点开始的,这是根节点的值,接下来读出的是2,根据前序遍历的规则,这是根节点的左子节点的值。同样接下来的4是值为2的节点的左子节点。接着读出两个‘#’,表明值为4的节点的左右子节点均为null指针,因此它是一个叶节点。接下来回到值为2的节点,重建它的右子节点,由于下一个字符是‘#’,表明2的右子节点是null。这个节点的左右子树都已经构建完毕
  • 超棒!谷歌师兄的数据结构算法刷题笔记太强了
    高畅现在是谷歌无人车部门(Waymo)的工程师,从事计算机视觉和机器学习方向。 他在美国卡内基梅隆大学攻读硕士学位时,为了准备实习秋招,他从夏天开始整理某 code 上的题目,几个月的时间,刷了几百道题目。 凭借着扎实的基础和长期的勤奋,他很快找到了如愿的工作。 入职前,闲暇的时候,他突然想到,自己刷了那么多题,而且对很多题目的解法有着总结,为何不把这些题目归纳总结一些,做成一个便于后来者阅读学习的电子书呢? 有了想法,作为行动派的他说干就干,于是这样一本制作精美且免费开源的书籍出现在大家面前。 引用他的话来说: 本书分为算法和数据结构两大部分,又细分了十五个章节,详细讲解了刷题时常用的技巧。我把题目精简到了101道,一是呼应了本书的标题,二是不想让读者阅读和练习时间过长。 这么做不太好的一点是,如果只练习这101道题,读者可能对算法和数据结构的掌握不够扎实。因此在每一章节的末尾,我都加上了一些推荐的练习题,并给出了一些解法提示,希望读者在理解每一章节后把练习题也完成。 整本书,我仔细看了一遍,并对书中的一些解题思路和代码进行校验。 从我的直观感受来说,这是一本用心的数据结构算法类书籍,全书总共 143 页篇幅,详细讲解算法的内容有十五个章节。 每个章节都是一些重要的知识点,伴有基础讲解和例题介绍,当然,也有一些推荐的练习题。 话不多说,让我们来看一下书的目录:
  • [C++]Leetcode超高效刷题顺序及题目详解笔记(持续更新中)
    一.前言 博主最近在LeetCode上用C++练习。一路走来踩过一些坑,做了一些总结和笔记,分享给需要的人。 LeetCode中文版:https://leetcode-cn.com/ 二.介绍 LeetCode 是一个非常棒的平台,收集了许多公司的面试题目。相对其他平台而言,有着下面的几个优点: 题目全部来自业内大公司的真实面试不用处理输入输出精力全放在解决具体问题上题目有丰富的讨论可以参考别人的思路精确了解自己代码在所有提交代码中运行效率的排名支持多种主流语言:C/C++,Python, Java可以在线进行测试,方便调试 人类解决问题的一般性的思维方法,总结起来主要有以下几种: 时刻不忘未知量。即时刻别忘记你到底想要求什么,问题是什么。(动态规划中问题状态的设定)试错。对题目这里捅捅那里捣捣,用上所有的已知量,或使用所有你想到的操作手法,尝试着看看能不能得到有用的结论,能不能离答案近一步(回溯算法中走不通就回退)。求解一个类似的题目。类似的题目也许有类似的结构,类似的性质,类似的解方案。通过考察或回忆一个类似的题目是如何解决的,也许就能够借用一些重要的点子,用特例启发思考。通过考虑一个合适的特例,可以方便我们快速寻找出一般问题的解。反过来推导。对于许多题目而言,其要求的结论本身就隐藏了推论,不管这个推论是充分的还是必要的,都很可能对解题有帮助。 如果是大二大三、研一的同­
  • 数据结构与算法——leetCode刷题笔记(五):字符串
    数据结构与算法——leetCode刷题笔记(五):字符串 来源:https://blog.csdn.net/weixin_42923076/article/details/112687067
  • 华为工程师总结的LeetCode刷题笔记提供下载,太优秀了
    前言: 最近又有不少老铁在后台留言说,想进大厂,但是算法不好。最近我整理了一份刷题实录,这份刷题实录,也让我进了心仪的大厂。现在开放分享给大家。希望对大家有所帮助。 任何的算法题,如同写作文一样,都有一些模板可以套用的。比如面试常考的DP(动态规划),难的是一些关键点是否能想清楚。比如你能写出动态转移方程,这题基本上就可以AC了。 整个刷题实录内容,包括 双子针、动态规划、二分查找、贪心算法、深度优先搜索、字符串、递归、字典树、排序、链表等相关专题内容。图文并茂,附有刷题答案源码。 点此处直达资料获取通道。 第一部分必读系列: 学习算法和刷题的思路指南学习数据结构和算法读什么书动态规划解题套路框架动态规划答疑篇 动态规划答疑篇回溯算法解题套路框架二分查找解题套路框架滑动窗口解题套路框架 双指针技巧总结BFS算法套路框架Linux的进程、线程、文件描述符是什么Git/SQL/正则表达式的在线练习平台 第二部分动态规划系列: 动态规划设计:最长递增子序列经典动态规划:0-1 背包问题经典动态规划:完全背包问题经典动态规划:子集背包问题 经典动态规划:编辑距离经典动态规划:高楼扔鸡蛋经典动态规划:高楼扔鸡蛋(进阶)经典动态规划:最长公共子序列动态规划之子序列问题解题模板 动态规划之博弈问题动态规划之正则表达动态规划之四键键盘动态规划之KMP字符匹配算法 贪心算法之区间调度问题团灭
  • 火爆Github!这份LeetCode刷题笔记限时免费!太优秀了!
    前言: 最近又有不少老铁在后台留言说,想进大厂,但是算法不好。最近我整理了一份刷题实录,这份刷题实录,也让我进了心仪的大厂。现在开放分享给大家。希望对大家有所帮助。 任何的算法题,如同写作文一样,都有一些模板可以套用的。比如面试常考的DP(动态规划),难的是一些关键点是否能想清楚。比如你能写出动态转移方程,这题基本上就可以AC了。 整个刷题实录内容,包括 双子针、动态规划、二分查找、贪心算法、深度优先搜索、字符串、递归、字典树、排序、链表等相关专题内容。图文并茂,附有刷题答案源码。 第一部分必读系列: 学习算法和刷题的思路指南学习数据结构和算法读什么书动态规划解题套路框架动态规划答疑篇 动态规划答疑篇回溯算法解题套路框架二分查找解题套路框架滑动窗口解题套路框架 双指针技巧总结BFS算法套路框架Linux的进程、线程、文件描述符是什么Git/SQL/正则表达式的在线练习平台 第二部分动态规划系列: 动态规划设计:最长递增子序列经典动态规划:0-1 背包问题经典动态规划:完全背包问题经典动态规划:子集背包问题 经典动态规划:编辑距离经典动态规划:高楼扔鸡蛋经典动态规划:高楼扔鸡蛋(进阶)经典动态规划:最长公共子序列动态规划之子序列问题解题模板 动态规划之博弈问题动态规划之正则表达动态规划之四键键盘动态规划之KMP字符匹配算法 贪心算法之区间调度问题团灭 LeetCode
  • 剑指offer刷题笔记汇总
    转载请注明作者和出处: http://blog.csdn.net/john_bh/ 文章目录 1. 剑指offer 介绍2. 题目分类2.1 数据结构类2.2 具体算法类题目 1. 剑指offer 介绍 《剑指offer》剖析了80个典型的编程面试题,系统整理基础知识、代码质量、解题思路、优化效率和综合能力这5个面试要点。 如果是单纯的面试需求,剑指offer的优先级肯定是在Leetcode之前,总的说它有三个优点: 很可能在面试中出现原题约66题,题量少,但是涵盖的内容较全能培养一个良好的刷题习惯 缺点是: 只有66题,刷着容易过拟合动态规划的题比较少,因此需要在Leetcode上专项训练。 基本每道题都很精彩,所以这里就不一一洗写了,题解可以看看我的代码仓库或者讨论区的内容。 2. 题目分类 算法题主要分成数据结构和具体算法部分,简单归类如下。 2.1 数据结构类 LinkedList 003-从尾到头打印链表014-链表中倒数第k个结点015-反转链表016-合并两个或k个有序链表025-复杂链表的复制036-两个链表的第一个公共结点055-链表中环的入口结点056-删除链表中重复的结点 Tree 004-重建二叉树017-树的子结构018-二叉树的镜像022-从上往下打印二叉树023-二叉搜索树的后序遍历序列024-二叉树中和为某一值的路径026-二叉搜索树与双向链表038
  • C语言 leetcode 刷题 个人笔记
    C语言 leetcode 刷题 个人笔记 经过这几天的打磨,也是找到一点门路了,前二天都快把我整绝望了,就简单的算法题,我得想半天,脑子不够用,现在好多了正在努力. 第一题 题目 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/merge-two-sorted-lists 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 我的解法 二个链表合并到一个新开辟的一个链表.返回一个新开辟的链表 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){ struct ListNode* temp1 = l1; struct ListNode* temp2= l2; struct ListNode* ret = (struct ListNode
  • 简直不能太优秀!华为工程师总结LeetCode刷题笔记,开源中
    前言: 最近又有不少老铁在后台留言说,想进大厂,但是算法不好。最近我整理了一份刷题实录,这份刷题实录,也让我进了心仪的大厂。现在开放分享给大家。希望对大家有所帮助。 任何的算法题,如同写作文一样,都有一些模板可以套用的。比如面试常考的DP(动态规划),难的是一些关键点是否能想清楚。比如你能写出动态转移方程,这题基本上就可以AC了。 整个刷题实录内容,包括 双子针、动态规划、二分查找、贪心算法、深度优先搜索、字符串、递归、字典树、排序、链表等相关专题内容。图文并茂,附有刷题答案源码。 帮忙转发一下,关注后添加助理vx:yunduoa2019或扫描下图二维码,跟随助理指引自行获取 第一部分必读系列: 学习算法和刷题的思路指南学习数据结构和算法读什么书动态规划解题套路框架动态规划答疑篇 动态规划答疑篇回溯算法解题套路框架二分查找解题套路框架滑动窗口解题套路框架 双指针技巧总结BFS算法套路框架Linux的进程、线程、文件描述符是什么Git/SQL/正则表达式的在线练习平台 第二部分动态规划系列: 动态规划设计:最长递增子序列经典动态规划:0-1 背包问题经典动态规划:完全背包问题经典动态规划:子集背包问题 经典动态规划:编辑距离经典动态规划:高楼扔鸡蛋经典动态规划:高楼扔鸡蛋(进阶)经典动态规划:最长公共子序列动态规划之子序列问题解题模板
  • 数据研发笔试Leetcode刷题笔记08:青蛙跳台阶问题
    文章目录 1 题目描述2 解题思路3 代码实现(Python3)4 复杂度分析 1 题目描述 来源:力扣(LeetCode) 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 2 解题思路 此类求 多少种可能性 的题目一般都有 递推性质 ,即 f(n) 和 f(n-1)…f(1) 之间是有联系的1。 设跳上 n 级台阶有 f(n)种跳法。在所有跳法中,青蛙的最后一步只有两种情况: 跳上 1级或 2 级台阶。 当为 1 级台阶: 剩 n-1 个台阶,此情况共有 f(n-1) 种跳法;当为 2 级台阶: 剩 n-2 个台阶,此情况共有 f(n-2) 种跳法。 f(n) 为以上两种情况之和,即 f(n)=f(n-1)+f(n-2),以上递推性质为斐波那契数列。本题可转化为 求斐波那契数列第 n 项的值 ,与 斐波那契数列题 等价,唯一的不同在于起始数字不同。 青蛙跳台阶问题: f(0)=1, f(1)=1, f(2)=2 ;斐波那契数列问题:f(0)=0, f(1)=1, f(2)=1。 斐波那契数列的定义是 f(n + 1) = f(n) + f(n - 1),生成第 n 项的做法有以下几种: 1. 递归法: 原理: 把 f(n