- 博客(56)
- 收藏
- 关注
原创 day53|动态规划14-最长子序列(最长公共子问题)
和718题相区分,718题输出的是最长重复子数组 ,本题不需要将重复的部分连续出现。如何比较两种字符串比较的状态。
2023-06-14 19:53:40
464
原创 day51|买卖股票问题5-6(冷冻期+手续费)
含有冷冻期之后,需要dp数组再多加一个状态即冷冻期,如果这一天是冷冻期的最大收益是多少。714.买卖股票的最佳时机含手续费类似于买卖股票II,在卖出股票的时候将手续费减去即可。总结股票问题
2023-06-10 08:58:21
99
原创 day50|动态规划11-买卖股票的最佳实际3-4(限制买卖次数的情况)
确定递归函数,当前的每一个状态都由前一天决定。第i天的股票第一天持有状态有两种,一种是前一天就持有该股票,另一种是前一天不持有今天购入该股票达到当天持有股票的状态,两者取最大值得到第i天第一次持有股票的最大收益。第i天的股票第一次不持有状态有两种,一种是前一天就不持有该股票,另一种是前一天第一次持有该股票今天将该股票卖出后,获取收益。在计算的过程中已经自动限制好了两次交易,因而不再需要其他的交易情况。
2023-06-08 22:49:41
444
原创 day47-动态规划9-打家劫舍问题
打家劫舍问题关键在于找到前后之间的依存关系。打家劫舍I-II在前一天的文章中有讲解到今天主要解决打家劫舍III,本题目为树形dp的入门问题。
2023-06-05 22:31:48
106
原创 day44|动态规划7-装满背包最小用多少件物品(零钱兑换,完全平方数)
完全背包指的是向容量一定的背包放入无限的物品,两层for循环均为正序,与此同时不同的for循环的顺序所代表的排列和组合问题是不同的。这次可以使用完全背包的方式再分析一下该问题。
2023-06-02 20:22:14
580
原创 day43|动态规划6-完全背包及其应用-零钱兑换II-组合总和IV
0-1背包指的是给定背包重量,将物品放入背包中,使得背包中的物品达到最大的价值。(每个物品只能往其中放一次)在0-1背包问题中,第二层for循环需要是倒序遍历才可以保证每个物品只使用一次,如果物品使用的次数没有限制,只需要将第二个for循环改成正序遍历即可。
2023-06-01 11:13:57
425
原创 day43|动态规划5-不同0-1背包的问题形态
和分割等和子集的问题比较像要想碰撞得到的剩下石头比较小,那么需要将石头尽可能分成相等的两堆。将石头的重量抽象成价值,将一半石头的重量抽象成背包的最大容量。dp[j]:装满容量为j的物品的最大价值dp数组初始化:dp[0]=1递推公式:dp[j] = max(dp[j],dp[j-nums[i]]+nums[i])遍历顺序:第一层遍历物品,第二层遍历背包注意需要倒序进行遍历。打印dp数组。
2023-05-31 15:18:40
431
原创 day41|动态规划3-整数拆分&不同二叉搜索树
动态规划问题需要找到后一个问题关联的前一个或前几个子问题,在整数拆分问题中,后一个整数的拆分由前面整数的拆分决定。在不同二叉搜索树问题中,拆分一个二叉树,依赖于当前的根节点可以拆分出多少搜索二叉树。
2023-05-30 08:58:20
206
原创 day38|动态规划-爬楼梯问题
动态规划比较重要的是找到前后两个状态之间的联系,在向后遍历的过程中注意遍历的顺序和初始化操作。动归基础类问题背包问题打家劫舍股票问题子序列问题。
2023-05-26 21:11:02
891
原创 day36|贪心算法5-重叠区间问题
移除区间使得剩余的区间中没有重复的区间,如果想要利用贪心算法,那么需要去除重叠区间中的最大程度的区间。记录分割区间,如果下一个区间与上一个区间发生重合,那么将这个区间的end值进行替换。
2023-05-24 13:48:58
153
原创 day35|贪心算法-柠檬水找零&用最少的箭引爆气球
由于现在身高的大小顺序不知道,所以需要先确定身高的大小顺序(确定身高的维度,某一个人前面人的身高一定是高于这个人的),这样等身高的大小顺序确定下来之后,就可以按照k的值将对应的数组进行插入。我的贪心思路:尽量让重叠的部分在一起,局部最优就是找到重叠的数组。分析题目的场景,贪心的策略就是优先选择10块钱进行找零,最后再选择5进行找零,5更加万能。更加简单的方法是将直接将ten,five设置成两个变量记录手头这两个变量的值。列表的insert的用法,可以在指定位置插入指定的值。
2023-05-23 17:26:23
168
原创 day34|贪心算法3-分发糖果&加油站
贪心的思路,:让绝对值大的负数变为正数,当前数值达到最大,整体最优:整个数组和达到最大。局部最优可以推出全局最优。那么如果将负数都转变为正数了,K依然大于0,此时的问题是一个有序正整数序列,如何转变K次正负,让 数组和 达到最大。那么又是一个贪心:局部最优:只找数值最小的正整数进行反转,当前数值和可以达到最大(例如正整数数组{5, 3, 1},反转1得到-1 比 反转5得到的-5大多了),全局最优:整个数组和 达到最大。
2023-05-22 21:10:22
86
原创 day32|贪心算法2-
在贪心算法1中我们实现了分发饼干、摆动序列和最大子序和的问题。贪心算法没有固定的模板,需要具体问题具体分析例如分发饼干先将最大的饼干进行分发满足胃口最大的学生;摆动序列中利用curdiff和prediff记录是否达到峰值;最大子序和问题中当遇到当前和小于0那么将当前和归0,继续往下加和。整体的思想就是需要找到解决问题的合适的规则,将规则实现。
2023-05-20 09:52:12
37
原创 day31|贪心算法1:-分发饼干/摆动序列/最大子序和
通过局部最优解去找到全局最优解,贪心有时候就是常识性推导,并不存在什么模板或者规律,将问题拆解完成问题即可。
2023-05-19 11:01:58
57
原创 day30|回溯法6-总结+N皇后问题
什么是回溯算法?回溯算法的本质其实就是暴力搜索,并不是高效的算法,只不过通过剪枝可以减少运行的时间。回溯法通常能够解决什么问题?组合问题:N个数里面按一定规则找出k个数的集合排列问题:N个数按一定规则全排列,有几种排列方式切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集棋盘问题:N皇后,解数独等等回溯法解决问题的模板?void backtracking(参数) {if (终止条件) {存放结果;return;
2023-05-18 11:10:11
254
原创 day27|回溯法3-组合求和&回文子串
在求解组合问题之前,需要将组合问题的树形图找出来,找出来树形图之后,再使用回溯法的结构模板进行求解。回溯算法的模板结构如下所示。
2023-05-15 12:29:51
108
原创 day24|回溯算法1-基础&组合
递归回溯相辅相成,递归函数下边的部分即为回溯的逻辑。回溯搜索法:纯暴力搜索法,有些问题利用暴力搜索法搜不出来,需要使用回溯法进行搜索。
2023-05-13 10:06:53
92
原创 day23|二叉树9-二叉搜索树剪枝、建立、转化成累加树
本章节的内容选自代码随想录二叉树的种类、存储方式、遍历方式、定义方式涉及到二叉树的构造,无论普通二叉树还是二叉搜索树一定前序,都是先构造中节点。求普通二叉树的属性,一般是后序,一般要通过递归函数的返回值做计算。求二叉搜索树的属性,一定是中序了,要不白瞎了有序性了。注意在普通二叉树的属性中,我用的是一般为后序,例如单纯求深度就用前序,二叉树:找所有路径 (opens new window)也用了前序,这是为了方便让父节点指向子节点。所以求普通二叉树的属性还是要具体问题具体分析。
2023-05-12 09:53:01
142
原创 day22|二叉树8
可以进行大小的判断,和这个结点相比有何种变化。如果p和q在x的两边则说明x是公共祖先,如果p和q在x的左右两边则说明公共祖先在左子树或者右子树中,把握住二叉搜索树的特点。由于二叉搜索树已经确定了搜索方向,所以利用迭代法在本题中也变得非常简单。左右子树中是否存在p和q的值。
2023-05-11 11:23:27
37
原创 day18|二叉树5
本题可以利用最简单的层序遍历,进行求解,在层序遍历的过程中,取最左侧的结点即可。本题判断最后一行最靠左侧的结点:满足最后一行的最靠左侧。
2023-05-08 12:42:52
39
原创 day17|二叉树4
traversal函数中,判断方式是如果当前路径走到头,那么此时应该将该path进行返回;一定要注意在递归方式中一次递归只考虑当前函数即可。思路:利用前序(中左右),为什么需要使用前序呢?因为只有在使用前序的情况下,才能够记录这个节点后续的路径。收集路径的过程就是回溯的过程,在回溯的过程的基础上将path一步一步弹出即可。关键点:如何判断该结点是左叶子。
2023-05-06 18:57:50
54
原创 day16|二叉树3
前序(中左右),也可以使用,使用前序求的就是深度,使用后序求的是高度。根节点的高度就是二叉树的最大深度。真正求解深度应该使用高度,即后序遍历。中序遍历和后序遍历的不同之处在于根节点的访问位置不同,看递归的返回值返回给哪一个值。
2023-05-04 08:26:39
68
原创 day13|二叉树基础和遍历
深度为k,有2k−1个结点的二叉树在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 k层,则该层包含1−2h−1个节点。是一个有序树,左子树的值大于右子树它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
2023-05-02 15:08:05
80
原创 day12|栈和队列
实现特定目标的容器,在python内置的基础数据类型和方法上提供额外的高性能数据类型。常用的两个模块deque和Counterdeque:类似列表(list)的容器,实现了在两端快速添加(append)和弹出(pop)
2023-05-02 11:11:24
47
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人