- 博客(23)
- 收藏
- 关注
原创 day38.|动态规划01
1.动态规划中。2.动规五部曲:1.dp数组及下标的意义;2.递推公式;3.dp数组如何初始化;4.遍历顺序;5.打印dp数组。
2024-05-08 20:44:53 308
原创 贪心算法(总)
3.收到:20 找零:10+5,5+5+5。2.右边孩子评分比左边孩子评分高。左边孩子评分比右边孩子评分高。2.收到:10 找零:5。局部最优:遇到20,优先用10找零;1.题目规定了只用5,10,20。全局最优:完成整个账单的找零。1.存在两边的情况时,必须。充分利用饼干尺寸喂饱一个。情况一:上下坡中有平坡。情况三:单调坡中有平坡。情况二:数组首尾两端。
2024-05-06 10:13:05 311
原创 day30.|回溯法06
2.每个递归对应的是不同的行,for循环对应的是每一列。从而,通过递归的方式将棋盘的每一行的位置是否应该放皇后都遍历了。,然后一行一列确定皇后的唯一位置。是因为每一行每一列只放一个皇后,1.处理的是二维数组。
2024-05-04 21:46:43 243 1
原创 day29.|回溯法05
3.本题的去重操作不可以用used数组,因为利用used去标记使用过的元素,执行去重操作时,需要对数组进行排序。1.数组中存在重复的元素,但是得到的解集中不可以出现重复数组。所以,需要去重操作。4.两种去重方法:used数组去重 和 set去重。因为排序后会改变数组的顺序结构,得到错误的答案。2.处理排列问题就不用使用startIndex了。1.数组中不存在重复的元素,所以不需要去重操作。2.数组中存在相同的元素。3.但排列问题需要一个。,标记已经选择的元素。4.叶子结点得到结果。
2024-05-03 18:00:33 168 1
原创 day28.|回溯法04
2.收获结果时候,每个结点都有我们需要的结果,都要去把这个结果放入结果集中。1.数组中的元素存在相同的元素,但是解集中不能包含重复的子集,所以,关键在于。2.切割字串:[startIndex,i]。2.去重操作前,一定要对数组。1.切割问题可以使用。
2024-05-03 13:39:52 137 1
原创 day27.|回溯法03
1.代码中的startIndex就是树形图中的切割线。2.切割字串的范围是:[start Index,i]。是用于提取字符串子串的函数,其中。,所以不需要去重操作。
2024-05-03 09:56:47 291 1
原创 day24.|回溯法01
1.也可以叫做,它是一种搜索的方式。2.回溯是递归的副产品,只要有递归就会有回溯。回溯与递归相辅相成,只要有递归就有回溯。通常递归函数的下面就是回溯的逻辑。3.,如果想让回溯法高效一些,可以加一些剪枝的操作,但也改不了回溯法就是穷举的本质。(暴力查找)5.回溯法解决的问题:(1)组合问题:N个数里面按一定规则找出k个数的集合;(2)切割问题:一个字符串按一定规则有几种切割方式;(3)子集问题:一个N个数的集合里有多少符合条件的子集;(4)排列问题:N个数按一定规则全排列,有几种排列方式;
2024-04-22 19:07:11 427
原创 day23.|二叉树09
1.本题并不是单纯地删除一个结点。3.构造二叉树的时候,一定要确定好分割区间的规则。2.分割点就是数组中间位置的节点。1.如果根据数组构造一棵二叉树。(从大到小地去遍历整棵树),然后顺序累加就可以了。
2024-04-22 14:23:56 315
原创 day22.|二叉树08
1.二叉搜索树中,一定要考虑清楚:新插入的结点放在对应的叶子结点即可。1.如果遍历到的结点大于p和q,那么p和q的公共祖先一定在该结点的左子树;2.如果遍历到的结点小于p和q,那么p和q的公共祖先一定在该结点的右子树;3.若该结点的值在p和q的中间,那么该结点一定是p和q的公共祖先,1.删除结点的话,需要改变树的结构。(2)找到了需要删除的结点,是叶子结点,左为空,右为空;其中,第五种情况最为复杂,需要仔细考虑删除操作的方式。4.二叉搜索树是有序的,要利用好这一点。(5)左不为空,右不为空。
2024-04-22 09:32:30 258
原创 day21.|二叉树07
4.求最小公共祖先,需要从底向上遍历,那么二叉树,只能通过后序遍历(即:回溯)实现从底向上的遍历方式。二叉树的遍历是从上到下的,但是该题的处理顺序需要从下向上,所以必然会利用到。3.二叉搜索树可以转化为数组,通过中序遍历将二叉搜索树转化为一个从小到大排序的有序数组。后序遍历(左右中)就是天然的回溯过程,可以根据左右子树的返回值,来处理中节点的逻辑。1.二叉搜索树:中序遍历。,二叉搜索树可是有序的。,后序遍历是从下往上。2.因此,遍历顺序是。
2024-04-20 17:45:05 139
原创 day20.|二叉树06
2.二叉搜索树不用再强调遍历顺序(前中后序),因为二叉搜索树自带顺序,确定了我们的搜索方向。2.分割区间时,一定要确保是左闭右开 还是 左闭右闭,(本题是左闭右开)。3.进行左右区间分割的时候,需不需要if判断,主要在于终止条件的判断。1.一起操作两个二叉树。这种操作在之前 二叉树的对称 的题中遇见过。因为先构造中间节点,然后递归构造左子树和右子树。3.二叉搜索树是一个有序树。,利用迭代法也较为简单。
2024-04-16 09:55:10 306
原创 day17.|二叉树04
因为终止条件只需要判断到叶子结点即可,如果中的代码放在终止条件之后的话,中的代码如果是叶子结点的话,其代码还没有执行,就return了,就会把叶子结点落下。所以,一定要把中结点放在终止条件之前,把叶子结点加进去。4.因为是所有路径,所以找到一条路径后,需要返回到起点,然后继续找其他路径。这道题目要求左叶子之和,其实是比较绕的,因为不能判断本节点是不是左叶子节点。2.左叶子:需要通过结点的父节点来判断其左孩子是否为左叶子。,这样才方便让父节点指向孩子节点,找到对应的路径。2.求高度,所以用后序遍历,左右中。
2024-04-12 19:07:02 446
原创 day16.|二叉树03
3.求二叉树的最大深度,因为二叉树的最大深度等于二叉树的最大高度,所以可以用求高度的方法进行求解(后序遍历)。利用前序遍历才是求深度的真正逻辑,但是利用前序遍历的话,代码较为复杂,会涉及到回溯。3.求最小深度时,是到叶子结点的距离。和,根结点的左孩子不为空,右孩子为空的情况。2.除了最后一层外,其他层都满,且最后一层的叶子结点是从左到右依次填满。1.本题也可以用前序遍历和层序遍历,前序遍历涉及到回溯,层序遍历是迭代法。1.该题也可以用迭代法,利用层序遍历,属于层序遍历的模板题。1.普通二叉树的逻辑。
2024-04-09 16:10:56 296
原创 day15.|二叉树02
1.层序遍历——广度优先遍历,需要借助队列来实现。2.用队列去保存每层遍历过的元素。二叉树的每一层元素放在一个数组之中,返回的是一个二维数组。
2024-04-07 17:26:13 318
原创 day14.|二叉树01
用迭代法写出了二叉树的前后中序遍历,可以看出前序和中序是完全两种代码风格,并不像递归写法那样代码稍做调整,就可以实现前后中序。这是因为前序遍历中访问节点(遍历节点)和处理节点(将元素放进result数组中)可以同步处理,但是中序就无法做到同步!
2024-04-06 22:16:08 248 1
原创 day10|栈与队列01
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(pushpoppeekempty):实现MyQueueint pop()int peek()truefalse。
2024-03-21 20:04:46 1552 1
原创 算法Day1|704. 二分查找、27. 移除元素
刷题第一天。毫无头绪。加油!题目链接:https://leetcode.cn/problems/binary-search/文章讲解:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html视频讲解:https://www.bilibili.com/video/BV1fA4y1o715。
2024-03-07 13:10:47 1987 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人