自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 day 43 第九章 动态规划part10 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组

难点:1.dp数组的定义dp[i][j]为什么是下标为i - 1而不是i:如果是i的话,在初始化时如果nums1[i] 与 nums2[0] 相同的话,对应的 dp[i][0]就要初始为1,因此会多出两行for循环的初始化代码,不如当前写法:第一行和第一列都是零简洁。解释细节1:因为dp[i][j]代表下标以i - 1结尾的A和下标以j - 1结尾的B的最长重复子数组的大小,因此要求第一行dp[0][j]和第一列dp[i][0]都是零,所以省去了初始化的代码。想想之前的章节还落下不少,得找时间补呀。

2024-07-21 18:43:52 238

原创 day 42 第九章 动态规划part09 188.买卖股票的最佳时机IV 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费

由于**最多**买卖k次的dp数组状态有2 * k + 1个(因为进行零次买卖的状态是零),所以要求我们区分偶数(不持有股票)状态和技术(持有股票)状态的区别从而进行初始化和遍历dp数组。思路:本题较于买卖股票2区别在于它在卖完股票后会有冰冻期,再由递推公式可以得知还需要有的状态是今天卖出的状态和冰冻期的状态,因此一共有四个状态。2.确定递推公式时也要区分偶数和奇数状态:让j 从1开始(因为状态零代表不进行操作,所以永远是0,不需要进行公式推导),并且利用j += 2,j 和j + 1来控制奇数偶数状态。

2024-07-19 17:40:45 298

原创 day 41 第九章 动态规划part08 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II 123.买卖股票的最佳时机III

思路:本题和上一个可进行不限制次数买卖股票的不同之处在于规定了买卖次数,最多两次,这就要求我们对每一天设置五个状态:初始化dp[i][]:一共有i天,每天有五个状态,分别是没操作,第一次持有,第一次不持有,第二次持有,第二次不持有,分别对应0,1,2,3,4。接着初始化dp,最后确定遍历顺序。思路:本题在在一段时间内可以进行多次买卖,所以本题和普通的买卖股票的差别在于dp[i][0],如果是当日买入的话,本题dp[i][0] = 前一天不持有的金钱数 - prices[i],而不是-prices[i].

2024-07-18 17:29:26 348

原创 day 40 第九章 动态规划part07 198.打家劫舍 213.打家劫舍II 337.打家劫舍III

思路:先定义一个dp[i]数组:下标为i之前的房子最多能偷dp[i]的钱。然后确定dp数组的推导公式:dp[i]取决于前一个房子偷不偷:dp[i] = max(dp[i - 1],dp[i - 2] + nums[i])。思路:本题也是一个树形dp。定义一个只含有两个值(一个偷当前节点所得最大金钱,一个不偷所得的最大金钱)的dp数组,更新每个节点的这俩值,最后返回根节点的这俩值的最大值。思路:本题可以将环拆分成不包含首或者尾的两个普通的打家劫舍问题,并且记录这两个值,最后返回最大值。

2024-07-17 16:41:51 233

原创 day 38 第九章 动态规划part06 322. 零钱兑换 279.完全平方数 139.单词拆分

思路:本题抽象为一个多重背包问题,字典里的字符串是物品,s.size()是背包容量。递推公式:如果dp[j]是true,并且i - j 这一段在s里,那么dp[i]是true。2.递推公式的推导:如果dp[j]是true,并且i - j这一段字符出现在字典(转化后的哈希表)中,则dp[i]是true.难点:1.遍历物品时没有包含物品的数组,但是物品的大小有规律,因此直接利用规律遍历物品,初始值是1.2.dp的递推公式:求得是方法数的最小值,因此不是方法数的公式,二者有一定区别。难点:1.递推公式的理解。

2024-07-16 17:44:58 297

原创 day 37 第九章 动态规划 part05 完全背包 518. 零钱兑换 II 377. 组合总和 Ⅳ 70. 爬楼梯 (进阶)

思路:将用不同的硬币凑够面值为target并且每个硬币的数量不限制的问题转化为完全背包问题,target即背包的容量,dp[target]即方法数,而本题较之前的硬币题的区别在于本题是问方法数的排列问题,因此遍历顺序需要先遍历背包再遍历物品。思路:完全背包的整体思路与01背包基本相同,区别在于完全背包每个物品可以取多次,这就导致完全背包在遍历背包时必须顺序遍历。思路:本题是完全背包的组合问题,因此必须先遍历物品再遍历背包。解释细节1:先遍历背包,并且从0开始,所以需要判断i - nums[j] >= 0;

2024-07-14 16:59:54 324

原创 day 36 第九章 动态规划part04 1049. 最后一块石头的重量 II 494. 目标和 474.一和零

思路:本题是背包问题解决一定容量的背包里最多能放多少?本题抽象为有n种物品,将他们尽可能均分成两堆,用容量为sum/2的背包装物品,最后返回包里的和剩余的物品重量的差值即可。思路:本题抽象为求装满容量为x的背包的方法数。x是数组中正数元素的加和,由两个公式推导出来。解释细节1:背包问题能计算出在一定背包容量下的最大的重量或者最大价值。解释细节1:dp[j]代表用物品装满j重量的背包的方法数。思路:装满一个背包用的最大物品数。

2024-07-12 23:35:27 121

原创 day35 动态规划part03 01背包问题 一维 416. 分割等和子集

思路:先设置一个一维dp数组dp[j],代表当背包容量为j时背包能装下的最大价值为dp[j],然后确定递推公式,接着对数组进行初始化,dp[0] = 0,最后用两个for循环进行递推,这里第一层for循环必须遍历物品的种类,第二层必须倒叙遍历背包的容量。dp[j]代表当容量是j时放入的最大物品的重量,所以二者都代表重量。解释细节3:本题的dp[j]代表的意思有所不同注意区别:当背包容量是j时,背包能装下的最大重量。解释细节2:背包问题的一维数组必须满足这两个体条件,而二维数组都可以但也必须是倒叙遍历。

2024-07-12 14:46:15 233

原创 day32 动态规划part02 62.不同路径 63. 不同路径 II

思路:先判断边界,有两种情况,然后再初始化dp数组先都是零,然后如果原数组是零,dp数组就再初始化为1,否则当前dp数组和后面的数组都赋值为零,这里用for循环里的结束条件控制。然后遍历dp数组,利用遍历顺序填充dp数组,这里注意i,j都是从1开始,最后输出dp数组右下角的值。思路:设置一个dp二维数组,确定dp由上面和左面的两个值得到,接着初始化dp数组,第零行和第零列都是1,代表路线方法数是1,然后最后输出右下角位置的数组值。

2024-07-10 00:14:54 240

原创 day 32 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

思路:定义一个dp数组,表示到达第i个台阶需要的最小能量。所以到达第i个台阶的最小能量有两种可能,从前一个台阶加上cost【int- 1】,和从前两个台阶加上cost[i - 2],二者取最小值。

2024-07-09 01:00:29 115

原创 Day 30 第八章 贪心算法 part05 56. 合并区间 738.单调递增的数字

思路:本题只要想清楚个例,例如98,如果前一个数比后一个数大,那么就让前一个数减一后一个数变为9即得正确答案。之后第一个for循环从后往前遍历,让不符合要求的数减一并更新当前的flag的值,第二个for循环从flag到最后一个数中间的数都变成9.思路:先设置一个二维数组result,然后判断边界,如果不为空,**先对原数组进行排序**,接着把第一个区间加入到result之中,然后遍历后面的区间,如果有重叠直接用result.back()[1]进行更改,取当前值和result的最新值的最大值。

2024-07-06 21:01:14 281

原创 Day 29 贪心算法 part04 452. 用最少数量的箭引爆气球 435. 无重叠区间 763.划分字母区间

思路:用哈希表先把每个字母在s中的最远位置统计出来,然后遍历s数组让right取right和当前字母最大位置之间的最大值,直到i与right相等,让right - left即得一段字母的个数,然后初始化left的值准备下一段的计算。思路:此题用贪心算法,当前的最优解即最终最优解。先对points二维数组的左边界进行排序,如果当前节点的左边界大于上一个节点的右边界,则让result++,否则改变当前点的右边界,然后遍历下一个点。解释细节1:cmp定义:传入两个需要比较的值,然后直接return大于或者小于。

2024-07-05 18:33:29 398

原创 Day 22 77. 组合 216.组合总和III 17.电话号码的字母组合

思路:1.确定递归函数参数:和77. 组合 (opens new window)一样,依然需要一维数组path来存放符合条件的结果,二维数组result来存放结果集。思路:1.确定函数返回值和参数:在这里要定义两个全局变量,一个用来存放符合条件单一结果,一个用来存放符合条件结果的集合,所以我定义全局变量了;2.确定终止条件:path这个数组的大小如果达到k,说明我们找到了一个子集大小为k的组合了,在图中path存的就是根节点到叶子节点的路径。当sum的值比n大时,也就终止了。

2024-06-28 17:23:54 393

原创 Day 21 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树

左:接着划分区间,root的左孩子接住下一层左区间的构造节点;思路:1.先确定终止条件:修剪的操作并不是在终止条件上进行的,所以就是遇到空节点返回就可以了;2.确定单层递归的逻辑:中:如果root(当前节点)的元素小于low的数值,那么应该递归右子树,并返回右子树符合条件的头结点;中: 中节点的处理逻辑就是让cur的数值加上前一个节点的数值。左:让当前节点的值加上pre的值。思路:1.确定递归终止条件:这里定义的是左闭右闭的区间,所以当区间 left > right的时候,就是空节点了。

2024-06-26 21:09:25 262

原创 Day 20 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点 (二叉搜索树专题)

思路:还是按照递归三部曲来做,本题特殊点在于本体的终止条件是当root的val值等于key或者root本身是null的时候,在终止条件中分为没找到就是null的情况和找到了两种情况,在找到的情况下有四种情况;思路:当递归到空节点时,就定义一个新节点并将新节点返回给上一个·递归函数,然后进行添加节点的操作,最后返回到中节点时返回root(不用改二叉树的结构)。思路:根据二叉搜索树的性质:如果当前节点大于p,q那么答案就在当前节点的左子树上,同理推另一种情况。解释细节3:代码中有解释。

2024-06-25 21:48:14 150

原创 day13 144.二叉树的前序遍历 145.二叉树的后序遍历 94.二叉树的中序遍历

思路:利用递归来遍历二叉树里的所有节点,并按顺序把节点的值存入到vec数组中。

2024-06-23 20:37:57 173

原创 LeetCode150. 逆波兰表达式求值

思路:如果当前字符串是算术运算符,则取出栈中两个元素进行运算,否则将数字字符串压入栈中。

2024-06-19 21:38:18 231

原创 LeetCode|| 232.用栈实现队列 225. 用队列实现栈 20. 有效的括号 1047. 删除字符串中的所有相邻重复项

思路:当为左括号时,往栈里加入对应的符号,当是右括号时,比较栈顶和数组元素,此时有两种情况返回false,但如果对应上了就pop,然后接着比较,当数组遍历完最后看栈是否为空。难点:区分stin.top()和stin.pop()的区别,pop()既能返回值也可以删除栈顶元素。思路:把字符串按规则压进栈中,然后利用字符串加和的方法把栈中元素加入到字符串中,然后返回字符串。思路:用一个队列就能实现,将队列前面的元素弹出在重新加入队列的末尾即可,最后弹出队前元素。解释细节4:最后如果是空栈,则返回true。

2024-06-18 21:41:25 319

原创 LeeCode|| 151.翻转字符串里的单词 卡码网:55.右旋转字符串 + 总结双指针算法

思路:首先先把所有空格移除(利用双指针法移除元素),移除的过程中还需要手动加上空格,然后再反转整个字符串后面最后再翻转每个单词。思路:现将整体反转,再把局部反转,主要考察对reverse的利用。难点:这个思路比较难,思考如果是左旋呢?解释难点:左旋先局部后整体。针对数组删除操作的问题。

2024-06-17 11:53:47 431

原创 LeeCode|| 344.反转字符串 541. 反转字符串II 卡码网:54.替换数字

思路:用一个for循环通过i += 2k来巧妙地遍历整个数组,然后根据题意分两种情况使用库函数reverse。解释细节3:s.end()并不代表任何字符,它指向最后一个元素的后面的位置,所以符合左闭右开的原则。2.扩充数组的代码用resize(新的容量大小),原来有一个位置所以只需要重新加五个位置就行。思路:首先将原数组扩充,然后利用双指针法从新数组的最后一位和旧数组的最后一位开始覆盖原数组。解释细节2:反转函数的写法,可以举个例子来看看咋写。难点:注意vector容器的定义代码。1.统计数字的代码写法。

2024-06-16 21:54:34 330

原创 LeeCode||454. 四数相加 II 383. 赎金信 ● 15. 三数之和 18. 四数之和

思路:利用双指针算法将所有符合条件并去重的结果填入二维数组result里,最后return result:首先利用i指针遍历数组nums,再用left和right指针分别从两侧向中间移动直到left > right,在此过程中通过left和right和i指针的移动进行去重。思路:先便利a,b数组,统计a + b出现的次数,再便利c,d数组,看umap映射里是否出现0 - (c + d) 的值,如果出现,就让count加上umap里值等于0 - (c + d)的个数。新的一周又是补进度的一周。

2024-06-16 19:53:09 581

原创 LeeCode||242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

思路:此题需要找某个值是否存在在数组中,所以想着用哈希表,又因为需要记录数值和下标,所以需要用map,因为不需要排序,所以需要用unordered_map。思路:先确定用unordered_set集合,然后其中一个数组转化为unorded_set,然后通过一个for循环和unordered_set的find()函数来寻找相同的元素,存入到另一个unordered_set里面,最后输出。因此需要快速判断某个元素是否存在在某个集合里时,用哈希法。补充细节:unordered_set可以自动去重。

2024-06-12 21:03:04 390

原创 代码随想录算法训练营day2| 977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵II

今天是6.9,正值端午假期,没啥事把前天的博客补一下哈哈哈,补进度的感觉可太难受了。解释细节3:写完if后发现后面需要不断循环这个过程,所以这里是while而不是if。解释细节4:通过观察可得,所以要求两个指针从两侧开始向中间靠拢来便利nums。解释细节2:当通过移动终止位置而求出的sum大于target时再移动起始位置。解释错误点2:slow应该从nums.size() - 1,开始。思路:遵循左闭右开的原则进行很多圈的遍历和赋值。

2024-06-10 19:52:55 484

原创 代码随想录算法训练营day4| 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II

思路:通过两个cur指针(有一个需要提前移动)遍历两个链表来寻找两个单链表的第一个相同节点(指的是LinkedNode,而不是节点的值),然后输出节点即可。细节二:通过画图可知每次循环中 cur -> next,cur -> next -> next -> next需要存储。解释细节1:让cur1提前移动的目的是使得两个链表的末尾对齐,使得两个指针对应起来。解释细节4:根据x = z,当速度相同的两个指针相遇时,此时指向的节点就是入口节点。24. 两两交换链表中的节点 :临时节点的存储和节点的删除。

2024-06-09 20:52:36 556

原创 代码随想录算法训练营day1|203.移除链表元素 707.设计链表 206.反转链表

设置pre = nullptr和cur = head两个指针,通过不断移动两个指针来便利整个链表,使得cur -> next = pre;难点4:必须是return reverse而不是reverse的原因在于我们需要将每次递归的处理结果返回给上一层调用,最终形成一个完整的链表。成员只能在其定义的类内部被访问,对类的外部是不可见的,所以同一个类里面的public函数可以调用。细节2解释:由于在反转链表时有的指针方向会发生消失,所以需要提前记录消失的指针。总结作用:方便直接给变量里的val和next赋值。

2024-06-09 11:47:52 447

原创 代码随想录算法训练营day1|二分查找,27.移除元素

这段代码,问题在于:没有清楚目标值位置的三种情况;对left和right的相对位置不清楚。4.如果找不到目标值,left和right最终的相对大小,情况一是left>=right,情况二是left>right。遇到的困难:return -1;的位置问题,问题在于对left和right的相对位置不清楚。这段代码,问题在于:不清楚求左边界的思路。2.主函数中三种情况的输出,问题在于:对目标值的位置问题三种情况分析不清楚。3.求边界的时候没有对边界初始化。题目链接:​​​​​​​。1.right的初始值。

2024-06-05 22:00:53 422

shiyan1-3.exe

shiyan1-3.exe

2023-05-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除