- 博客(36)
- 收藏
- 关注
原创 回溯算法part06总结
排列问题:N个数按一定规则全排列,有几种排列方式,排列是有序的,也就是说 [1,2] 和 [2,1] 是两个集合,这和之前分析的⼦集以及组合所不同的地⽅,每层都是从0开始搜索⽽不是startIndex,切割问题:一个字符串按一定规则有几种切割方式,难点在于如何模拟那些切割线,切割问题中递归如何终⽌,在递归循环中如何截取⼦串,如何判断回⽂。组合问题:N个数里面按一定规则找出k个数的集合,用递归控制for循环嵌套的数量。子集问题:一个N个数的集合里有多少符合条件的子集,棋盘问题:N皇后,解数独等等。
2023-12-28 22:01:50 355
原创 二叉树part09 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树
108.将有序数组转换为二叉搜索树。538.把二叉搜索树转换为累加树。669. 修剪二叉搜索树。
2023-12-21 21:58:44 427
原创 二叉树patr06 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树
700 二叉搜索树的搜索。98.验证二叉搜索树。
2023-12-20 22:12:06 400 1
原创 二叉树part08 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
2.递归终止条件: 题目中说了p、q 为不同节点且均存在于给定的二叉搜索树中。3.单层递归条件:如果p,q小于节点的值,继续递归左子树,如果p,q大于节点的值,继续递归右子树。2.递归终止条件:遇到空返回,其实这也说明没找到删除的节点,遍历到空节点直接返回了。1.确定递归的参数和返回值: 参数是二叉树节点和p,q,返回值二叉树最近公共祖先。1.递归参数和返回值:参数是二叉树节点和val,返回值是处理后的新的节点。1.确定递归的参数和返回值:递归参数二叉树的节点和val。450.删除二叉搜索树中的节点。
2023-12-19 22:26:08 377 1
原创 二叉树part7 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先
3.单层递归逻辑,如果左右都有值,返回root,如果左没有值,返回右边,如果右没有值,返回左边。1.确定递归参数和返回值:递归参数是二叉树节点和q,p,返回值是p,q两个节点最近公共祖先。2.递归终止条件,root为null 返回null,或者p,或者q等于root返回root。3.单层递归逻辑:如果pre不为null,返回两个节点最小值,否则pre等于root。1.递归的参数和返回值:参数是根节点,返回值是number类型,两个节点最小差值。2.递归终止条件:root为null,返回null。
2023-12-19 22:07:39 412 1
原创 513找树左下角的值 112. 路径总和 113.路径总和ii
3.确定单层递归逻辑:终止条件是判断叶子节点,所以递归的过程中就不要让空节点进入递归了,递归函数是有返回值的,如果递归函数返回true,说明找到了合适的路径,应该立刻返回。2.确定终止条件:如果最后count == 0,同时到了叶子节点的话,说明找到了目标和,如果遍历到了叶子节点,count不为0,就是没找到。2.递归的终止条件是左子树和右子树为空,更新深度的值,获取左子树的。3.单层递归逻辑:在找最大深度的时候,递归的过程中依然要使用回溯。1.递归参数是二叉树和深度,返回的值。113 路径总和||
2023-12-17 19:42:39 364 1
原创 part04 110平衡二叉树 257. 二叉树的所有路径 404.左叶子之和
3.单层递归逻辑,当判定左右子树都不是平衡树返回-1,否则返回二叉树的最大高度,根据是否返回-1判断是否是平衡二叉树。3.确定单层处理逻辑,分别处理叶子节点,是否加上->2.确定递归终止条件是节点为null时return。1.确定递归的参数是二叉树,递归的结果布尔值。2.递归的终止条件是节点为null返回0。1.确定递归的参数是二叉树和路径空字符串。257. 二叉树的所有路径。
2023-12-15 22:03:40 349
原创 二叉树part01 144 二叉树前序遍历 94二叉树中序遍历 145二叉树后序遍历
二叉树前序遍历,中序遍历,后序遍历都既可以用递归,也可以用迭代。了解 二叉树的种类,存储方式,遍历方式 以及二叉树的定义。使用递归方法:递归三部曲。1.明确递归参数和返回值。144 二叉树前序遍历。2.明确递归终止条件。3.确定单层递归逻辑。145二叉树后序遍历。
2023-12-15 20:33:11 317
原创 part3 104二叉树的最大深度 111二叉树的最小深度 222完全二叉树的节点个数
2.递归左右子树的节点,判断左右子树都存在,取两者最小值+1,左子树存在右子树不存在,结果是左子树加1,左子树不存在右子树存在,结果是右子树加1,两者都不存在结果是1。2.记录栈每一层的长度,遍历栈的长度,先出栈,把左子树和右子树放进去。1. 定义一个栈,放入二叉树,判断如果二叉树为空,直接返回空数组。2.不为空,记录左右子树高度,取两者最大值。1.判断二叉树为空,直接返回0。104 二叉树的最大深度。111 二叉树的最小深度。1. 判断为空的情况是0。
2023-12-13 21:11:07 363 1
原创 part2 102二叉树层序遍历 107 二叉树的层序遍历 || 226.翻转二叉树 101 对称二叉树
2.记录队列每一层的长度,遍历每一层队列长度,获取队列最后一个元素,放进数组中,判断队列最后一个元素左子树和右子树是否有值,有值就放进队列中。1.定义一个队列,把二叉树放进队列中,遍历队列,循环终止条件是队列长度不为0。思路:使用队列,先进先出。
2023-12-12 21:59:49 428
原创 239. 滑动窗口最大值 347.前 K 个高频元素
1.元素进入队尾,同时维护队列单调性。1.使用map记录出现的次数。2.将map转为数组并排序。3.将数组遍历k值,获取值。347: 前k个高频元素。
2023-12-11 22:20:09 362 1
原创 20. 有效的括号 1047. 删除字符串中的所有相邻重复项
思路:定义一个数组,循环遍历每一项,如果数组最后一个元素等于遍历的某一项,那么删除,否则添加进去,最后数组拼接。3.定义数组,遍历循环,判断如果存在,数组最后一个值不匹配返回false,从数组删除,否则放进去。1.判断符合长度余数是1,返回false。1047. 删除字符串中的所有相邻重复项。2.使用哈希值匹配,值是左括号。
2023-12-10 21:54:36 370 1
原创 344.反转字符串 541. 反转字符串II 151.翻转字符串里的单词
思路:使用双指针,遍历的时候i+=2*k,左指针指向i - 1,右指针指向数组i+k,循环遍历交换两个值,左指针++,右指针--2.如果快指针等于0,数组初值和最后一个是空,快指针++,否则数组慢指针等于数组快指针,快指针加加,慢指针加加。思路:双指针,左指针指向0,右指针指向数组长度减一,循环判断左指针++,有指针--1.把字符串转化成数组,定义左指针,右指针为0,循环遍历判断快指针小于数组的长度。151.翻转字符串里的单词。541 反转字符串II。
2023-12-10 21:05:35 350 1
原创 454.四数相加II 15. 三数之和
3.使用while,判断左指针小于右指针,判断target等于两个指针,那么set进去,左指针++,右指针--,小于左指针++,大于右指针--2.遍历整个数组,目标值target等于遍历的每一个值,左指针指向遍历的i+1,右指针指向数组长度减一。1.使用map方法,遍历前面2个数组,数组之和相加,如果有的话就set加一,没有就set为1。2.遍历后面2个数组,如果map有0减去两个数组之和,count加一。1.对数组进行排序,定义set。454.四数相加II。思路:使用双指针思路。
2023-12-10 20:18:06 314 1
原创 242有效的字母异位词 349两个数组的交集 202快乐数
2.对给定的值遍历循环,判断值不等于1,定义一个set,如果不存在就添加,否则返回false。2.定义一个方法,遍历数组每一项,查找charCodeAt每一项的值,加加。2.定义一个set,遍历清除之后的数组,小的数组包含大的数组的值,放进去。思路:1.定义一个数组长度是26位,每一位初始值都是0。3.把获得值拼接,两个值进行比较。思路:1. 定义一个方法获取num各个位上的乘积最后和。3.最后判断n的值等于1。思路:1.用set方法清除每个数组相同的值。
2023-12-10 18:31:51 320 1
原创 链表part02 | 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点
思路:设置虚拟节点,虚拟节点指向头结点,前一个节点指向虚拟节点,判断头结点和头结点下一个节点存在,保存下一个节点的值,改变当前节点,下一个节点,上一个节点的指针的值,更新前上一个指针,当前指针。思路:用双指针思路,先设置虚拟头结点,设置慢指针,快指针都为虚拟头结点值,遍历快指针N步,在修改快指针的值,在同时遍历快慢指针的值,改变慢指针的值,返回虚拟头结点的值。19.删除链表的倒数第N个节点。24. 两两交换链表中的节点。
2023-12-03 13:01:43 323 1
原创 链表part01 | 203.移除链表元素 206.反转链表
做题思路:定义哨兵节点,如果头结点和头结点下一节点是空,返回空,定义当前节点是头结点,前一个节点是null,遍历节点,先保存下一个节点的值,先改变下一个节点值为前一个节点,上一个节点为下一个节点,当前节点为保存的值。看视频思路:如果删除的刚好是头节点,可以定义哨兵节点,不用单独考虑,要删除的元素是否有头节点了。做题思路:遍历,如果遇到要删除的元素,就改变要删除元素的前一个指针指向。如果没有学过链表,可以先了解链表的基础知识。看视频思路:还可以使用递归。203.移除链表元素。
2023-12-03 11:38:46 364 1
原创 数组part2 | 977.有序数组的平方 209.长度最小的子数组
看视频思路:可以用滑动窗口思路,定义快慢指针,改变快慢指针位置形成滑动窗口,数组遍历,定义一个变量sum累加遍历每个元素,while循环,如果sumj大于等于target,减去慢指针位置的值,慢指针++看视频思路:可以用双指针思路,遍历元素,每个元素平方后,定义慢指针为数组初始值,快指针为数组最后一个元素,使用while,如何第一个元素比最后一个元素,把最后一个元素倒序放进去结果数组里。思路:自己做题思路遍历数组平方后,使用库函数排序。思路:自己做暴力解,双层遍历,找到最小子数组。977.有序数组的平方。
2023-11-30 20:33:54 369
原创 数组01 || 704. 二分查找 27. 移除元素
看视频讲解:看题解学习了二分查找,最重要的是理解区间问题,左闭右闭,左闭右开,存在问题不清楚什么时候=,如何判断,什么时候不等于,又如何判断,看完了视频才理解。看视频讲解:学习了双指针,快指针指向数组遍历的元素,慢指针指向要覆盖的元素下标,如果不是要覆盖的元素++思路:最开始就想到用库函数查找,解决了。思路:用数组库函数splice删除。
2023-11-30 20:11:23 382
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人