- 博客(20)
- 收藏
- 关注
原创 代码随想录-Day19 | LeetCode654.最大二叉树、LeetCode617.合并二叉树、LeetCode700.二叉搜索树中的搜索、LeetCode98.验证二叉搜索树
题目链接:654.最大二叉树思路(后续优化,每次递归不需要创建新数组,在原数组基础上传递下标):与上道题同样的思路,以数组最大值进行分割,左侧为根节点左子树,右侧为根节点的右子树,然后进行递归。LeetCode617.合并二叉树题目链接:617.合并二叉树思路:就按照LeetCode题目思路来做就可以。构造二叉树我们还是采用前序遍历。确定遍历顺序后,我们讨论递归三部曲:LeetCode700.二叉搜索树中的搜索题目链接:700.二叉搜索树中的搜索题目描述:给定二叉搜索树(BST)的根节点 root
2024-07-29 20:28:20
847
原创 代码随想录-Day18 | LeetCode513.找树左下角的值、LeetCode112. 路径总和 &113.路径总和ii、LeetCode106.从中序与后序遍历序列构造二叉树
这个点非常重要!然后通过这个根节点我们就能进一步判断其。
2024-07-27 11:46:29
938
原创 代码随想录-Day17 | LeetCode110. 平衡二叉树、LeetCode257. 二叉树的所有路径、LeetCode404.左叶子之和
题目链接:110. 平衡二叉树题目描述:给定一个二叉树,判断它是否是高度平衡的二叉树(一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1)。回顾:高度是从叶子节点开始向上层层遍历加1,所以对于求高度采用后序遍历(左右中:先遍历左右孩子,然后返回给中间节点1)而深度是从根节点开始向下层层加1,所以对于求深度采用前序遍历(中左右:从中间节点向下去遍历节点,统计节点的深度,而不是向上去返回)思路:了解上面思路之后本题求解非常简单清晰(递归法):LeetCode257. 二叉树的所有路径题目链接:2
2024-07-24 22:14:23
875
原创 代码随想录-Day16 | LeetCode104. 二叉树的最大深度、LeetCode111. 二叉树的最小深度、LeetCode222.完全二叉树的节点个数
题目链接:104. 二叉树的最大深度题目描述:二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。思路:第一想法就是利用之前层序遍历的解法,计算二叉树的层数就是最大深度。递归法后续再弄。LeetCode111. 二叉树的最小深度题目链接:111. 二叉树的最小深度题目描述:给定一个二叉树,找出其最小深度(从根节点到最近叶子节点的最短路径上的节点数量)。思路:还是利用层序遍历,循环里面多加一个条件,当碰到某个节点没有左右孩子,直接提前终止程序。LeetCode222.完全二叉树的节点个数
2024-07-24 22:13:43
273
原创 代码随想录-Day15 | LeetCode102. 二叉树的层序遍历 、LeetCode226. 翻转二叉树、LeetCode101. 对称二叉树
题目链接:二叉树的层序遍历题目描述:给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。思路:层序遍历方式就是图论中的广度优先遍历,而对于前面的前中后遍历方式为深度优先遍历。对于深度优先遍历这种递归的逻辑,利用栈的先进后出的特性适合解决。而对于我们层序遍历,需要一层一层遍历的逻辑,由于队列的先进先出特性,非常适合解决层序遍历的问题。这道题的思路不难理解:先将根节点的存到队列里,我们会设置size变量来统计每一层节点的个数,进而我们就能知道,需要多少次的循环,才能
2024-07-21 15:03:37
442
原创 代码随想录-Day14 | 二叉树递归遍历 、二叉树迭代遍历
思路:写递归算法的三要素:中序遍历后续遍历二叉树迭代遍历利用**栈(后进先出)**实现递归逻辑思路:中节点先加入栈后就弹出, 然后加入其右孩子节点,为什么这样做?由于栈是后进先出的特性,只有先加入右孩子才能实现,从栈弹出后为前序中左右的遍历方式!中序遍历思路:中序遍历相对来说还是比较难理解,主要是二叉树我们都是从根节点进行访问的,而且前序遍历和后续遍历开始处理的节点也是从根节点。但是中序遍历与他们不同,中序遍历顺序: 左 中 右,访问节点和处理节点不同!代码的实现过程:从根节点开始,先把根节
2024-07-19 10:03:04
391
原创 代码随想录-Day13 | LeetCode239. 滑动窗口最大值、LeetCode347.前 K 个高频元素
栈模型可以想象成一个顶端开口的瓶子,其特性是先进后出,后进先出。从随想录中针对栈的题目,其实不难发现由于这个后进先出的特性,非常适合元素的匹配问题,比如说LeetCode20. 有效的括号:寻找我们左括号相同类型的右括号,我们直接从栈顶元素去对比;还有LeetCode1047. 删除字符串中的所有相邻重复项:我们在遍历字符串的时候,一旦发现当前所遍历的元素和栈顶元素重复,直接从栈顶pop进而达到删除重复项的目的。
2024-07-14 22:20:43
820
原创 代码随想录-Day11 | LeetCode20. 有效的括号 、LeetCode1047. 删除字符串中的所有相邻重复项、LeetCode150. 逆波兰表达式求值
题目链接:20. 有效的括号题目描述:给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。思路:由于栈数据结构的特殊性,比较适合做匹配类的题。整体思路是按顺序遍历字符串,每遇到左括号就将其相同类型的右括号添加进栈,由于题目要求需满足括号闭合的顺序需要相同,也就是说当 ‘(’ 先进栈,再一旦遍历到右括号时,对应的 ‘)’ 必须先出现! ;所要每碰到右括号就和当前栈顶元素比较看是否相同,若不相同则说明匹配顺序不一致(失败匹配情况一);同时若在遍历中遇到当前栈已经为
2024-07-11 09:45:08
419
原创 代码随想录-Day10 | LeetCode232.用栈实现队列、LeetCode225. 用队列实现栈
题目链接:232.用栈实现队列思路:此题不涉及任何算法,对于队列两端开口,特性为先进先出。而栈只有一端开口,特性为后进先出。所以若想用栈来实现队列功能,至少需要两个栈:stackIn负责进栈,stackOut负责出栈;代码部分比较简单,主要思想就是:若想要实现出队列或者访问队列头元素功能,要把stackIn里面的元素依pop出去,然后push到stackOut中,这样一来实现元素顺序颠倒,最后面向stackOut出栈就可模拟出队列的效果,同时访问stackOut栈顶元素也可实现访问队列头部元素的功能。在编写
2024-07-03 22:11:28
446
原创 代码随想录-Day09 | LeetCode28. 找出字符串中第一个匹配项的下标、LeetCode459. 重复的子字符串
我们前缀表记录的是最长相等前后缀的长度,也就是。
2024-07-01 21:40:51
688
原创 秋招 - 剑指offer + Hot 100 - Day5 | 剑指offer26.树的子结构、剑指offer27.二叉树的镜像、剑指offer28.对称的二叉树
题目描述:给定两棵二叉树 tree1 和 tree2,判断 tree2 是否以 tree1 的某个节点为根的子树具有 相同的结构和节点值。注意,空树 不会是以 tree1 的某个节点为根的子树具有 相同的结构和节点值。题目描述:给定一棵二叉树的根节点 root,请左右翻转这棵二叉树,并返回其根节点。题目描述:请设计一个函数判断一棵二叉树是否 轴对称。
2024-07-01 21:39:49
173
原创 代码随想录-Day08 | LeetCode344.反转字符串、LeetCode541. 反转字符串II、卡码网:54.替换数字、LeetCode151.翻转字符串里的单词、卡码网:55.右旋转字符串
题目链接:344.反转字符串题目描述:编写一个函数,其作用是将输入的字符串反转过来。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。思路:利用双指针法LeetCode541. 反转字符串II题目链接:541. 反转字符串II题目描述:给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。1. 如果剩余字符少于 k 个,则将剩余字符全部反转。2. 如果剩余字符小于 2k 但大于或等于 k 个
2024-06-29 22:08:10
690
原创 秋招 - 剑指offer + Hot 100 - Day4 | 剑指offer22.链表中倒数第k个节点、剑指offer24.反转链表、剑指offer25.合并两个排序的链表
题目描述:给定两个以 有序链表 形式记录的训练计划 l1、l2,分别记录了两套核心肌群训练项目编号,请合并这两个训练计划,按训练项目编号 升序 记录于链表并返回。题目描述:给定一个头节点为 head 的链表用于记录一系列核心肌群训练项目编号,请查找并返回倒数第 cnt 个训练项目编号。题目描述:给定一个头节点为 head 的单链表用于记录一系列核心肌群训练编号,请将该系列训练编号 倒序 记录于链表并返回。:分别指向两个链表的头部,然后进行大小比较,小的元素作为头节点,不断递归;
2024-06-29 22:07:03
209
原创 代码随想录-Day07 | LeetCode454. 四数相加II、LeetCode383. 赎金信、LeetCode15. 三数之和、LeetCode18. 四数之和
要清楚什么样的题目适合采用哈希表,哈希表能够快速搜索找到集合内目标值是否存在。还要清楚针对不同题目采用什么样的哈希结构。如果范围比较小且集中最好采用数组;若范围比较大且分散就要考虑用set或者map;set可以对内部存储数据进行自动去重,map内每个元素有两个属性值,key表示存储数值,value可以根据我们不同需求得到不同的用途,所以说当我们不但存储元素值,同时要知道对应的索引下标或者统计出现的次数时,首选map。对于某些题目哈希表并不是最优解法,要求去重时,可以采用for循环和双指针搭配思路。
2024-06-25 21:57:34
903
原创 秋招 - 剑指offer + Hot 100 - Day3 | 剑指offer19.正则表达式匹配、剑指offer20.表示数值的字符串、剑指offer21.调整数组顺序使奇数位于偶数前面
题目描述:教练使用整数数组 actions 记录一系列核心肌群训练项目编号。为增强训练趣味性,需要将所有奇数编号训练项目调整至偶数编号训练项目之前。请将调整后的训练项目编号以 数组 形式返回。题目描述:请设计一个程序来支持用户在文本编辑器中的模糊搜索功能。‘*’ 匹配零个或多个前面的那一个元素。‘.’ 匹配任意单个字符。
2024-06-25 21:56:34
148
原创 代码随想录-Day06 | LeetCode242.有效的字母异位词、LeetCode349. 两个数组的交集、LeetCode202. 快乐数、LeetCode1. 两数之和
哈希表适用题目类型:给你一个元素,判断这个元素是否在集合里出现过,首选考虑用哈希表进行快速判断。然后具体分析是用数组set、还是map若数值比较小用数组数值比较大用set还有种情况数值不是很大,但是数值的数字比较分散,用数组比较浪费存储空间,此时用set比较合适当我们不仅要知道元素有没有出现过还要知道这个元素对应的下标,此时需要使用key和value结构来存放,key来存元素,value来存下标,那么使用map正合适。
2024-06-24 21:42:18
253
原创 代码随想录算法训练营-Day 03 | 链表理论基础、LeetCode203.移除链表元素、LeetCode707.设计链表、LeetCode206.反转链表
单链表中每个节点由两部分组成:当前节点的值和指向下一个节点的链接(存放下一个节点的地址)。因此虽然链表中的节点在内存中不是连续分布的,但我们可以通过每个节点的链接即可向后查询。双链表:单链表每个节点只有指向下一个节点的链接,而双链表每个节点有两个链接:一个是向后的节点链接,一个是向前的节点链接。循环链表:链表首尾相连(尾节点链接指向首节点)以单链表为例, 若删除下图中间节点,我们只需将它前一个节点的链接指向它下一个节点即可删除当前节点,同时对于Java有自己的内存回收机制,该节点不需要我们手动释放。
2024-06-20 22:00:24
283
原创 秋招 - 剑指offer + Hot 100 - Day2 | 剑指offer16.数值的整数次方、剑指offer17.打印从1到最大的n位数、剑指offer18.删除链表的节点
题目描述:实现一个十进制数字报数程序,请按照数字从小到大的顺序返回一个整数数列,该数列从数字 1 开始,到最大的正整数 cnt 位数字结束。题目描述:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。题目描述:实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,x^n)。
2024-06-20 21:56:39
183
原创 秋招 - 剑指offer + Hot 100 - Day1 | 剑指offer第二章:简单回顾几种题型的分类
题目描述:设备中存有 n 个文件,文件 id 记于数组 documents。若文件 id 相同,则定义为该文件存在副本。请返回任一存在副本的文件 id。
2024-06-20 21:52:47
602
原创 代码随想录-Day02 | LeetCode977.有序数组的平方、LeetCode209.长度最小的子数组、LeetCode59.螺旋矩阵II
LeetCode977.有序数组的平方、LeetCode209.长度最小的子数组、LeetCode59.螺旋矩阵II
2024-01-30 15:24:21
976
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人