- 博客(45)
- 收藏
- 关注
原创 代码随想录算法训练营|day48
空间优化:可以看到第i天状态只依赖于第i-1天的状态,因此只需要记录前一天状态即可。因为不限制交易次数,故只要今天股价比昨天高,就交易。dp[i][1] 表示第i天。dp[i][1] 表示第i天。所以在当天是买入状态时,持有的最大现金为。较上题多了条件:股票可以进行多次买卖。贪心:在历史最低点买入,最高点卖出。dp[i][0] 表示第i天。dp[i][0] 表示第i天。本题中股票只能买卖一次。
2024-03-02 12:30:18 659
原创 代码随想录算法训练营|day47
上题扩展:房屋是环状的,意味着第一个房子和最后一个房子不能同时偷,故求解max(不偷第一个房子,不偷最后一个房子)因为抢劫到的最高金额只与前两间房屋有关,故采用滚动数组优化。,则当前节点的左右孩子可偷可不偷,取两种可能性的最大值。后序遍历:通过递归函数的返回值进行下一步求解。,则当前节点的左右孩子都不能偷;家及之前所能获取的最大金额。
2024-03-01 11:09:41 819
原创 代码随想录算法训练营|day46
1、0/1背包:外循环nums,内循环targettarget倒序且target从nums[i]开始题目类型转移方程416.分割等和子集存在问题(bool)1049.最后一块石头的重量II最值问题474.一和零最值问题494.目标和组合问题2、完全背包:(1)求总和嵌套循环内外顺序不影响外循环nums,内循环targettarget正序且target从nums[i]开始外循环target,内循环numstarget正序且题目类型转移方程322.零钱兑换最值问题。
2024-02-29 14:07:32 760
原创 代码随想录算法训练营|day45
分清楚背包问题类型,背包和物品分别是啥,求解很容易先遍历物品,后遍历背包:背包容量肯定要大于等于物品,小于等于最大背包容量(背包容量从物品起先遍历背包,后遍历物品:物品必须能装进背包里(物品小于背包容量。
2024-02-28 11:52:10 557
原创 代码随想录算法训练营|day44
01背包为了保证每个物品只添加一次,遍历背包容量时(内循环)按照从大到小的顺序;i++) { // 遍历物品j--) { // 遍历背包容量完全背包物品是可以添加多次,背包容量按从小到大顺序遍历(内外循环嵌套顺序无影响)// 先遍历物品,再遍历背包i++) { // 遍历物品j++) { // 遍历背包容量遍历顺序很关键:求组合数:外层for遍历物品,内层for遍历背包。求排列数:外层for遍历背包,内层for遍历物品。
2024-02-27 10:32:28 541
原创 代码随想录算法训练营|day42
初始化:dp[0]=true,表示和为0,不需要选取任何元素,为真。如果和为奇数或者数组中最大值大于。该问题转换为在数组中找到元素和。即可,为0/1背包问题,表示是否存在子集和为i。无法分成两个等和子集。
2024-02-24 15:02:16 710
原创 代码随想录算法训练营|day40
对于一棵二叉搜索树,左子树小于右子树,因此,遍历1到n范围内的任意数字i,将其作为根节点,递归构建左子树。边界情况:对于一个正整数将其拆分为至少两个正整数之和,dp[0],dp[1]没有意义。边界情况:空节点或只有一个根节点只有一种情况,,记录遍历过程中第i轮的最大值dp[i]时,相当于重复前面的遍历过程,所以。点构建BST树的所有情况。得到的最大乘积,对于。
2024-02-23 09:38:49 834
原创 代码随想录算法训练营|day34
如果顾客付20元,自己至少有一张5元和一张10元,five–,ten–;或者自己至少有3张5元,five-=3;如果顾客付10元,自己至少有一张5元,five–,ten++;贪心:对气球右边界排序,初始时最大右边界为points[0][1],就能被箭射穿,否则更新最大右边界,箭个数++如果顾客付5元,直接five++
2024-02-17 11:15:58 1045
原创 代码随想录算法训练营|day33
从右向左遍历,若左边比右边大,糖果值取max(当前值,右边孩子糖果值+1)保证每人有一个糖果;从左向右遍历,若右边比左边大,糖果值+1;如果sum(gas) > sum(cost),证明不可能跑完全程;,将nums[0]变为相反数,求和,,遍历数组将其变为正数;小于0,证明不可能为起点,第一个变化位置处取值大。
2024-02-16 10:46:07 788
原创 代码随想录算法训练营|day32
从i位置出发,dp[i] = nums[i] + i;不从i位置出发dp[i] = dp[i - 1]当前位置为i时,下一跳的可扩展边界为j,如果下一跳位置从未到达过,dp[j]=dp[i]+1。(1)贪心:若当前位置是能走到的最远位置离,count++,更新下一个能走到的最远位置。若下一跳能跳到的最远位置为当前位置,不能往前走了。dp[i]:[0,i]范围内任意位置,下一跳可以跳到的最远位置。若数组长度大于1,但是nums[0] == 0,无法继续前进;的最小次数 + 1,当前位置的最小跳跃次数)
2024-02-15 12:06:13 560
原创 代码随想录算法训练营|day30
每次取map中第一个dest访问,将其作为新的src,每访问一条src->dest,删除该记录。判断当前值是否有效:因为每行只选取一个位置,故只需判断列和正斜、反斜方向是否有皇后。如果访问的src没有dest了,将当前节点加入结果集,并沿栈返回。先对tickets排序,used记录当前车票是否被使用。row控制递归深度,for循环控制列,进而确定当前位置。若车票使用完并找到路径,返回,否则回溯查找路径。当前位置有效性判断:行、列、九宫格数字不重复。如果当前位置能放数字,且有效,递归,否则回溯。
2024-02-09 12:34:43 688
原创 代码随想录算法训练营|day28
同层去重:used[i - 1] = false,说明是从前一个元素回溯回来的,若used[i - 1] = true说明是进入下一个递归取值。如果当前字符串满足要求,递归调用下一层。作为下次递归的初始位置。,要求结果集合不能重复,需要去重。加入结果,否则提前回溯。相较于上题子集问题,数组。子集相当于找树的节点,为避免重复取值,需要。
2024-02-06 12:22:27 578
原创 代码随想录算法训练营|day27
组合、切割、子集、排列、棋盘:N皇后,解数独等等学习go语言map实现set基本能实现回溯,代码随想录yyds。
2024-02-05 10:29:57 962
原创 代码随想录算法训练营|day22
二叉搜索树中的插入操作看题目要求以为得旋转树,去瞅瞅平衡二叉树旋转树那部分对于二叉树的理解终于到了看山不是山的境界了。
2024-01-31 15:17:02 546
原创 代码随想录算法训练营|day21
若root是p、q的最近公共祖先包括三种情况:节点p、q分别在root的左、右子树;类似上题:需要辅助变量,preNode记录前一个节点,用于比较数值;count记录当前节点值出现次数;maxCount记录遍历到当前节点时众数的出现次数。如果当前count == maxCount,结果中追加(有多个众数);如果count > maxCount,清空结果并追加当前节点值。二叉树自底向上查找,后序遍历,可以根据左右子树的返回值,处理中间节点。二叉搜索树前序遍历,节点值是有序排列的。遍历过程中求解最小值。
2024-01-30 10:32:35 571 1
原创 代码随想录算法训练营|day18
递归求解通常需要公共变量提取,创建无返回值函数,或者返回值为bool注意切片扩容,导致结果出错,切片深拷贝、浅拷贝。
2024-01-28 09:16:39 814 1
原创 代码随想录算法训练营|day17
感觉val是包括了二叉树左节点就是叶子节点,和左节点不是叶子节点两种情况,平衡二叉树:节点的左右子树的高度差小于1。如果遇到叶子节点,添加路径。(1)递归:前序遍历。
2024-01-26 22:33:39 741 1
原创 代码随想录算法训练营|day9
KMP算法还得再学习理解。next数组记录了模式串子串中最长相等前后缀长度,减少了与文本串不匹配时的循环次数。
2024-01-19 12:43:53 821 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人