![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
代码随想录训练营
文章平均质量分 62
Huiwen_Z
这个作者很懒,什么都没留下…
展开
-
代码随想录算法训练营第五十六天(单调栈篇)| LeetCode 739, 496, 503,42,84
用栈存放柱子的位置,当每次遍历到的元素大于栈口元素,那么如果存在”凹槽“,那么栈口元素的位置就是凹槽的底部,将其弹出,如果此时栈中还有元素,说明在栈口元素的位置左边有比它高的柱子,凹槽存在,可以计算接到的雨水。:循环每一个元素的下标和值,如果当前温度高于在栈口元素对应的温度,那么就弹出该天数的下标,计算天数,记录到该天数的结果集中,等栈中小于当前温度的日子都被弹出且记录后,再把当前温度的下标记在栈里,来被之后几天的温度查找。,把第一个pop出后,stack便空了,就无法接着计算以第一个数为基准的面积了。原创 2024-03-01 23:59:42 · 1053 阅读 · 0 评论 -
代码随想录算法训练营第五十五天(动态规划篇)| LeetCode 198.,213. 打家劫舍
dp[i]: 到包括下标为i的房屋位置,所能偷窃的最大金额。原创 2024-02-29 00:14:17 · 363 阅读 · 0 评论 -
代码随想录算法训练营第五十四天(完全背包篇)| 279. 完全平方数,139. 单词拆分
dp[j]: 总和为j的平方数的最小个数。原创 2024-02-27 22:17:22 · 598 阅读 · 0 评论 -
代码随想录算法训练营第五十三天(完全背包篇)| LeetCode 322. 零钱兑换
对于遍历到的硬币coin[i],它可以和金额和为j-coin[i]的硬币们凑成金额j,那么所需的最少个数就是dp[j-coin[i]]+1(加上它自己),如果这个值小于不考虑coin[i]时的值dp[j],就选择它,否则选择原来的值。凑足0元所需最少的硬币肯定是0个——不选就行了,所以dp[0] = 0。这里考虑的是装满背包的个数问题,和遍历硬币的顺序无关,可以外层遍历背包容量(即金额),内层遍历物体(即硬币),也可以交换。dp[j]: 凑足金额为j所需要的最少硬币为dp[j]个。原创 2024-02-25 23:39:00 · 233 阅读 · 0 评论 -
代码随想录算法训练营第五十二天(完全背包篇)| 卡码网57. 爬楼梯
dp[j]: 到达j层有dp[j]种方法。原创 2024-02-15 22:50:36 · 222 阅读 · 0 评论 -
代码随想录算法训练营第五十一天(完全背包篇)|377. 组合总和Ⅳ
dp[j]: 凑成目标正整数i的组合(排列)有dp[j]个。原创 2024-02-13 22:48:05 · 419 阅读 · 0 评论 -
代码随想录算法训练营第五十天(完全背包篇)|518. 零钱兑换Ⅱ
dp[j]:装满容量为j的完全背包有dp[j]种方法。原创 2024-02-12 22:03:59 · 423 阅读 · 0 评论 -
代码随想录算法训练营第四十九天(动态规划篇)| 474. 一和零, 完全背包理论基础
dp[i][j]: 最多装i个0和j个1的背包最多能装dp[i][j]个物体。原创 2024-02-11 22:37:42 · 532 阅读 · 0 评论 -
代码随想录算法训练营第四十八天(动态规划篇之01背包)| 1049. 最后一块石头的重量Ⅱ,494. 目标和
dp[j]: 将容量为j的背包装满的方法。原创 2024-02-10 15:59:37 · 379 阅读 · 0 评论 -
代码随想录算法训练营第四十七天(动态规划篇)| 416. 分割等和子集
容量为j的背包,所背的物品价值最大可以为dp[j]。若dp[j] == j 说明集合中的某子集总和正好可以凑成总和j;如果dp[sum/2] = sum/2,说明数组可以被分割成等和子集。原创 2024-02-09 19:09:34 · 549 阅读 · 0 评论 -
代码随想录算法训练营第四十六天(动态规划篇)|01背包(滚动数组方法)
容量为j的背包可以背的物品的最大价值。原创 2024-02-08 23:12:20 · 538 阅读 · 1 评论 -
代码随想录算法训练营第四十五天(动态规划篇)|01背包
有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。原创 2024-02-06 21:19:06 · 1070 阅读 · 0 评论 -
代码随想录算法训练营第四十三天(动态规划篇)|63. 不同路径Ⅱ
如果当前网格有障碍物,那么无法到达;原创 2024-01-28 22:13:27 · 749 阅读 · 0 评论 -
代码随想录算法训练营第四十二天(动态规划篇)|62. 不同路径
【代码】代码随想录算法训练营第四十二天(动态规划篇)|原创 2024-01-27 21:45:20 · 192 阅读 · 0 评论 -
代码随想录算法训练营第四十一天(动态规划篇)|理论基础,509. 斐波那契数, 70. 爬楼梯, 746. 使用最小花费爬楼梯
动态规划:每一个状态一定是由上一个状态推导出来的。贪心:局部直接选最优的。原创 2024-01-26 15:54:37 · 304 阅读 · 0 评论 -
代码随想录算法训练营第四十天(贪心算法篇)| 763. 划分字母区间,56. 合并区间, 738. 单调递增的数字
对于第一步,我一开始建了一个方程来统计一个字母的最远位置,在第二部每次遍历字母,都要单独调用方程,所以效率很慢,但其实有更好方法,即简历字典,只用一次循环,不断地更新遇到的每个字母地最远位置就行了。从后向前遍历数字,如果当前比前一位小,将前一位减一,把当前位变为9。注意不能从前往后,这样减一之后就无法保证比前面的位数大了。只有从后往前才能重复利用上一次的比较效果。直接在数组中删除、更改元素会比较混乱,所以我专门开了一个空数组来储存结果。原创 2024-01-26 10:55:53 · 291 阅读 · 0 评论 -
代码随想录算法训练营第三十九天(贪心算法篇)| 406. 根据身高重建队列, 452. 用最少数量的箭引爆气球
people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]],以[4,4]为例,它在queue中,前面有四个比它大或等于它的数组,但people中全部数组都满足这一点,所以不管其它数组的顺序如何,它一定在第四个。先按k排列的无意义,因此先按照身高从大到小排列(如果身高相同,按照k从小到大),这样保证每一组前面的身高比它高。先将数组从小到达排序,如果后一个的xstart在前一个的区间之间,则重叠,更新区间(取两个区间的交集),如果不重叠,新的区间为当前的points。原创 2024-01-24 15:50:48 · 839 阅读 · 0 评论 -
代码随想录算法训练营第三十八天(贪心算法篇)| 860. 柠檬水找零
难得一气呵成、过程丝滑的一道题。总体思路是当前顾客给了10元时,如果前面有顾客给过五元,就能找零,反之不行,如果给了二十元,有两种情况可以正确找零:至少有三张五元,或者一张十元,一张五元。因此,在遍历数组过程中,用两个变量记录当前五元和十元的个数,设置相应的True或False情况即可。原创 2024-01-23 16:26:57 · 408 阅读 · 0 评论 -
代码随想录算法训练营第三十七天(贪心算法篇)|135. 分发糖果
这道题比我想的复杂。首先从前往后比,如果右边比左边大,右边的值为左边的值的基础加1,然后,从后往前比,如果左边的值比右边的值大,那么左边的值取右边的值加一和第一轮避过后的左边的值中最大的那个,这样能保证这个值保证了这个糖果的数量既大于左边的也大于右边的。原创 2024-01-22 23:21:18 · 381 阅读 · 0 评论 -
代码随想录算法训练营第三十六天(贪心算法篇)|1005. K次取反后最大化的数组和, 134. 加油站
然后,从前往后看数的正负性,先翻所有负数(所以要遍历整个数组,负数可能因为绝对值小在数组末位),如果翻完后还没用完K次,或者数组中全是正数,就翻绝对值最小的正数(即数组最后一个)。之所以按绝对值大小排序,而不是直接排序,是因为后者无法确定更新后的数组中绝对值最小的正数在哪里,不一定是遇到的第一个正数,可能前面反转后的负数的绝对值更小!按绝对值大小排序,如果遇到负数,会直接从前往后的顺序反,而遇到正数,只用反数组最后一个。后面还想到了更简单一点的代码,即每次重新排序,将最小的数翻过来,直到翻完K次为止。原创 2024-01-19 15:23:01 · 417 阅读 · 0 评论 -
代码随想录算法训练营第三十五天(贪心算法篇)| 122. 买卖股票的最佳时机, 55. 跳跃游戏,45. 跳跃游戏Ⅱ
具体到代码,记录下每个位置能到达的最大位置,每次更新最大范围,如果范围已经超过数组的长度,就返回True。e.g. 第i天买入,第j天抛出,那么利润是price[j] - price[i] = (price[j]-price[j-1])+(price[j-1]-price[j-2])+...+ (price[i+1] - price[i])。[1,0,2,1],从位置2能跳到最后,但不能从头跳到位置2,因为在位置零最多只能跳到位置1,而从位置1不能跳到位置2。原创 2024-01-19 09:40:25 · 358 阅读 · 0 评论 -
代码随想录算法训练营第三十四天(贪心算法篇)|10.2 分发饼干,376. 摆动序列,53. 最大子序和
贪心的本质是选择每一阶段的局部最优,从而实现全局最优。e.g. 一堆钞票,能拿走十张,想要拿走最大数额的钱。局部最优:每次拿面额最大的 ——> 全局最优:拿走最大数额的钱。原创 2024-01-17 15:23:49 · 340 阅读 · 0 评论 -
代码随想录算法训练营第三十三天(回溯算法篇)| LeetCode 51. N皇后,37. 解数独
题目大意:如何将n个皇后放置在n×n的棋盘上,并且使皇后彼此之间不能相互攻击(即任意两个皇后不能在同行、同列、同斜线。原创 2024-01-16 15:42:59 · 344 阅读 · 0 评论 -
代码随想录算法训练营第三十二天(回溯算法篇)|332. 重新安排行程
可以运用字典,直接将出发机场和目的地机场关联,这样就不用运用序列方式先确定出发机场一样,再找到对应的目的地机场(e.g ticket[0] == curAirport --> append(ticket[1]).表示飞机出发和降落的机场地点。对该行程进行重新规划排序。所有这些机票都属于一个从。和之前的增序子列相似,先将列表排序,这样一旦找到,就肯定是靠前的那个。如果存在多种有效的行程,按字典排序返回最小的行程组合。(肯尼迪国际机场)出发的先生,所以该行程必须从。原创 2024-01-15 15:51:18 · 441 阅读 · 0 评论 -
代码随想录算法训练营第三十一天(回溯算法篇)|491. 非递减子序列, 46. 全排列,47. 全排列Ⅱ
设定startIdx是为了不考虑之前遍历过的元素,但排列问题是有序的,比如对于数组[1,2],如果要求所有集合,得到[1,2]后,数组的第一位到了2,后面没有元素了,就直接结束,不用再从1开始看,因为[1,2]和[2,1]是一样的。但对于排列问题,它们不一样,所以如果第一位遍历到2,依然要考虑元素1。比如对于[1,1,2],我们先选1,下一位从[1,1,2]开始选,对于第一个1,是它本身,所以continue,对于第二个1,虽然和已有的1数值相同,但因为位置不同,是要加上去的。原创 2024-01-09 15:56:57 · 961 阅读 · 0 评论 -
代码随想录算法训练营第三十天(回溯算法篇)|78. 子集Ⅱ
比如对于数组[1,2,2,3], 假设我们已经收集到了前两个元素[1,2],我们继续得到[1,2,2]的步骤是:然后根据代码self.backtracking(),要继续在[2,3]中选择,startIdx是2,在这次递归中,第一个循环到的是2,可以append到path中。但当我们选择了1,然后从[2,2,3]中依次选择,选到第二个2时,它在[2,2,3]中的数组大于了startIdx,又因为它在数组[1,2,2,3]中和前一个数相同,就continue。不够这不只是表达不清的问题,还是由于理解不够透。原创 2023-12-29 15:48:13 · 315 阅读 · 0 评论 -
代码随想录算法训练营第二十九天(回溯算法篇)|78. 子集
这周开始实习了,期间改了改成绩已经出来的毕业论文,发给导师,不知道有没有发表的机会。实习后,虽然实际任务不多,但每天七点起床,来回通勤两个小时,已让我疲惫。好久没有练手了,这次比以往多了些浮躁,少了之前从代码的逻辑中体会到的快乐。希望以后会变好。原创 2023-12-28 22:57:56 · 451 阅读 · 0 评论 -
代码随想录算法训练营第二十八天(回溯算法篇)|93. 复原IP地址
题目链接:题目大意:给定一个只包含数字的字符串s,复原它并返回所有可能的 IP 地址格式。有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。原创 2023-12-20 23:27:44 · 326 阅读 · 0 评论 -
代码随想录算法训练营第二十七天(回溯算法篇)|131. 分割回文串
分割:选好子串中第一个分割的部分,接着选子串中后面分割的部分。第一个树层代表分割的第一个子串的可能性。startIdx为每一个字串的“分割线”。组合:选好数组中第一个数,接着选数组中第一个后面的数,进入递归。第一个树层代表选的第一个数的可能性。startIdx为选的数在数组中的序数。分割字串和组合的题目有异曲同工之妙。原创 2023-12-19 02:19:50 · 406 阅读 · 0 评论 -
代码随想录算法训练营第二十六天(回溯算法篇)|39. 组合总和,40. 组合总和Ⅱ
题目内容:给你一个的整数数组candidates和一个目标整数target,找出candidates中可以使数字和为目标数target的 所有,并以列表形式返回。你可以按返回这些组合。candidates中的数字可以。如果至少一个数字的被选数量不同,则两种组合是不同的。思路:和之前的组合那道题不同点在于1. if条件不用要求path的长度,只要和相同,就返回,可以加上剪枝——当和大于target,直接返回。2. 递归时的起始值(startIdx)是i,不是i+1, 因为可以重复。原创 2023-12-15 23:06:32 · 478 阅读 · 0 评论 -
代码随想录算法训练营第二十五天(回溯算法篇)|216. 组合总和III,17. 电话号码的字母总和
思路和上一次的组合(LeetCode77. 组合)思路差不多,只不过在判断条件是当所得数组的长度为k时,直接返回,如果和为n时,把组合加入结果集。而在代码随想录中,在添加数字到组合中时,就刷新了组合的和,回溯时不仅把path添加的元素弹出,也要把刚才加的元素减去,这个做法更能展现【回溯】的思想——把递归操作都撤回。另外,代码海提供了剪枝思路:当组合中的元素继续被添加,且已有和大于所要求的和时,就直接返回,不继续添加元素了,因为之后的和只会更大。原创 2023-12-14 22:24:57 · 458 阅读 · 0 评论 -
代码随想录算法训练营第二十四天(回溯算法篇)|理论基础,77. 组合
结束了二叉树的篇章,我们进入到回溯啦!原创 2023-12-13 23:09:37 · 435 阅读 · 0 评论 -
代码随想录算法训练营第二十三天(二叉树篇)|669. 修剪二叉搜索树,108. 将有序数组转化为二叉搜索树,528. 把二叉搜索树转换为累加树
669. 修剪二叉搜索树今天花时间把之前那道题通过例子补充了KMP算法的思路,虽然自认为搞懂了,但用文字和图画阐释出来让其他人(甚至以后的自己)理解感觉并不简单,必须要一遍遍理清思路和组织语言,现在仍然做得不够,会继续努力的。代码随想录算法训练营第十天|28. 找出字符串第一个匹配项的下标,459.重复的子字符串-CSDN博客669. 修剪二叉搜索树这道题的过程没有之前删除二叉搜索树的节点那么繁琐,因为我们不需要分开讨论要删除(修剪)节点的左右子树的存在情况。原创 2023-12-12 23:57:25 · 385 阅读 · 0 评论 -
代码随想录算法训练营第十天|28. 找出字符串第一个匹配项的下标,459.重复的子字符串
题目大意:给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。原创 2023-11-23 17:15:51 · 843 阅读 · 0 评论 -
代码随想录算法训练营第二十二天(二叉树篇)|450. 删除二叉搜索树中的节点
周一参加了公务员的省考,虽然只是抱着学习的心态尝试的,并不想上岸,但还是被打击到了,自己果然暂时还是“干啥啥不行”的状态,当然也是因为自己哪方面都不够非常努力。那么,继续努力吧,趁身体和大脑还能拼搏的时候。原创 2023-12-12 00:47:16 · 391 阅读 · 0 评论 -
代码随想录算法训练营第二十一天(二叉树篇)| 701. 二叉搜索树中地插入操作
, 下半段则是确定我们寻找的线路/方向在哪里,等终止后,就再把值一步步地返回上去。在判断终止条件上,我最开始想的是当当前节点无子嗣时,就根据当前值和节点值的大小给当前值赋予一个新的左节点或者右节点,但这当中包含了下面递归的逻辑了,一切变得混乱了......其实,当到达原本二叉搜索树的叶子节点时,下面这个代码。思路:从二叉搜索树的叶子节点找到要插入节点的位置,加到此叶子节点的下面。此法非常高效,在遍历时,只需根据当前节点和插入值的大小比较,决定向左还是向右走,等到达最底部,就建一个节点,直接插入便可。原创 2023-12-07 23:20:22 · 396 阅读 · 1 评论 -
代码随想录算法训练营第十九天(二叉树篇)| 501. 二叉搜索树中的众数
思路:用中序遍历二叉搜索树,用字典记录每个节点出现的频率,返回字典中频率(value)最大的节点值(key)。这次递归的思路比较顺,反而在字典的应用中花了点时间,好久没用,有些生疏了。原创 2023-12-03 23:45:56 · 386 阅读 · 1 评论 -
代码随想录算法训练营第十八天(二叉树篇)|530. 二叉搜索树的最小绝对差
今天在外面办了点事,只过了一道题,不过觉得每天不管进度如何,都发出来,养成习惯。原创 2023-12-02 23:58:53 · 437 阅读 · 1 评论 -
代码随想录算法训练营第十七天(二叉树篇)|617. 合并二叉树, 700. 二叉搜索树中的搜索,98. 验证二叉搜索树
思路:如果一棵树对应的位置是None, 那就返回另一课树,如果不是,则把两棵树的值相加。左子树和右子树分别进行递归。原创 2023-12-01 23:40:03 · 436 阅读 · 1 评论 -
代码随想录算法训练营第十六天(二叉树篇)
自己跟这个思路动手画一下,思路变清晰了,感觉比上次的递归好理解。原创 2023-11-30 23:10:30 · 556 阅读 · 0 评论