自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录算法训练营第四十四天 | 1049.最后一块石头的重量、494.目标和、474.一和零

本题就和 昨天的 416. 分割等和子集很像了,可以尝试先自己思考做一做。动态规划之背包问题,这个背包最多能装多少?LeetCode:1049.最后一块石头的重量II_哔哩哔哩_bilibili代码随想录。

2024-06-12 20:21:03 591

原创 代码随想录算法训练营第四十三天 | 01背包问题理论基础、01背包问题滚动数组、416. 分割等和子集

背包问题其实有很多种,01背包是最基础也是最经典的,软工计科学生一定要掌握的。

2024-06-05 20:29:02 870 2

原创 代码随想录算法训练营第四十二天 | 343.整数拆分、96.不同的二叉搜索树

这种题看似很难,其实一点也不容易。其实我已经不记得我的思路了,刚考完CSP,最近一直在忙期末,好久没写博客了。不过我当时想的肯定不是动态规划,动态规划的递推公式真的很难想到,需要你多做题目来获取思路。所以我直接上carl的思路吧。我觉得你都点到这里来了,相信你也是写不出来的,这种题直接看Carl的题解吧,我没看题解之前也是毫无思路。

2024-06-05 19:59:47 368

原创 代码随想录算法训练营第四十二天 | 62.不同路径、63.不同路径 II

究竟是什么(很重要,后面写着写着尤其是写到二维就时常会忘记dp[i]到底代表什么了,所以一开始就要不断提醒自己记住含义)2、

2024-05-30 20:35:28 785

原创 代码随想录算法训练营第四十一天 | 理论基础、509.斐波那契数列、70.爬楼梯、746.使用最小花费爬楼梯

这道题想清楚dp[i]的含义很重要,对应的就是五部曲里的第一步的,这里维护的dp数组dp[i]表示跳到这个地方所需要的体力,注意是跳到这里,如果要在这里起跳的话,那就需要在花费cost[i]的体力值。递推关系式:dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])大问题化小,小问题化了,爬到x楼的方法=爬到x-1楼的方法+爬到x-2楼的方法。比如爬到3楼可以从1楼爬2步,或者2楼爬1步,那爬到3楼的方法=爬到2楼的方法+爬到1楼的方法。

2024-05-30 19:19:36 816

原创 代码随想录算法训练营第三十九天 | 738.单调递增的数字、968.监控二叉树、总结

可以看看贪心算法的总结,贪心本来就没啥规律,能写出个总结篇真的不容易了。代码随想录贪心完结!撒花!准备本周末的CSP考试,冲冲冲。

2024-05-28 16:53:47 408

原创 代码随想录算法训练营第三十七天 | 860.柠檬水找零、406.根据身高重建队列、452.用最少数量的箭引爆气球

这道题属于重叠区间的问题,一样需要先对给定的数组按这左端点或者右端点进行排序,然后遍历数组,看看这个区间的左端点是否小于等于上个区间放入右端点,如果重叠就不需要额外多用一支箭,但要注意更新右端点要用。大体上来说,就是先按照身高排序,最高的在最前面,一样高的比较数组中的第二位,第二位小的排前面。这样的好处就是我后面从前向后遍历每一个人时,我可以根据数组的第二位直接insert到que[ ]对应的位置。本题是一道 重叠区间的题目,好好做一做,因为明天三道题目,都是 重叠区间。452. 用最少数量的箭引爆气球。

2024-05-27 20:52:47 322

原创 代码随想录算法训练营第三十八天 | 435.无重叠区间、763.划分字母区间、56.合并区间

今天的三道题目,都算是 重叠区间 问题,大家可以好好感受一下。都属于那种看起来好复杂,但一看贪心解法,惊呼:这么巧妙!还是属于那种,做过了也就会了,没做过就很难想出来。不过大家把如下三题做了之后, 重叠区间 基本上差不多了。

2024-05-27 20:21:36 409

原创 代码随想录算法训练营第三十六天 | 1005.K次取反后最大化的数组和、134.加油站、135.分发糖果

目录1005.K次取反后最大化的数组和思路代码代码134.加油站思路代码135.分发糖果思路代码 直觉,直接写,没什么好讲的。但是 ,Carl居然不是这么写的,(好吧python是在作弊),他是这么写的:134.加油站思路 我想的方法原来是暴力法。。。计算每次rest = gas[i] - cost[i]的值,如果是正数,就继续指针向右, rest累加上去,如果出现rest是负数,那就说明原来的点不能作为起点,尝试下一个点。(这样分分钟超时了,每日崩溃1/

2024-05-26 21:12:08 1106

原创 代码随想录算法训练营第三十五天 | 122.买卖股票的最佳时机 II、55.跳跃游戏、45.跳跃游戏 II

如果给的数组长度为1,直接return 0 ,如果不为1,那第一步能跳的地方自然就是nums[0],如果第一步能跳的范围里跳不到终点,就遍历第一步能跳的范围,来扩大全局能跳的范围,如果不行,就遍历第二步能跳的范围, 继续扩大全局能跳的范围。贪心这种东西,毫无章法可言, 完全就是如果想不到,想破脑袋都想不到,如果有思路,刷刷就写出来,感觉完全就是看你的刷题量,和你脑瓜子灵不灵光。贪心就是这样,有的时候 会感觉简单到离谱,有时候,难的不行,主要是不容易想到。这个范围内,别管是怎么跳的,反正一定可以跳过来。

2024-05-26 15:48:40 394

原创 代码随想录算法训练营第三十四天 | 理论基础、455.分发饼干、376、摆动序列、53.最大子序和

所以就是从头开始遍历起,不断计算累计和,如果累计和是负数,前面那一整段就不要了,直接0加后面的数,从后面开始重新算。贪心真的很逆天,一点思路都没有,暴力法最后十个用例过不了的。我连用什么方式来判断这个是正,下个是负,或者这个是负,下个是正都不会。可以是大饼干优先满足大胃口,也可以是小饼干优先满足小胃口。基本贪心的题目 有两个极端,要不就是特简单,要不就是死活想不出来。其实就是用两个变量来存储。计算波峰的次数,具体可以看链接。,所以大家了解贪心算法 就了解它没有规律的本质就够了。不用花心思去研究其规律,

2024-05-24 20:22:25 396

原创 代码随想录算法训练营第三十二天 | 332.重新安排行程、51.N皇后、33.解数独、总结

代码随想录回溯到这里就正式结束了,后面开始学贪心算法。go go go。

2024-05-24 10:34:32 430

原创 代码随想录算法训练营第三十一天 | 491.递增子序列、46.全排列、47.全排列 II

本题 就是我们讲过的 40.组合总和II 去重逻辑 和 46.全排列 的结合,可以先自己做一下,然后重点看一下 文章中 我讲的拓展内容。首先,本题不能再进行排序了,题目要求的就是递增序列,你这一排求个集贸啊(嘻嘻)。这道题就是全排列了,其实没什么好讲的,多用了一个used参数用来纵向递归时判断某个数有没有被用过,因为全排列是一定要选满的,所以就不用startIndex参数了。本题重点感受一下,排列问题 与 组合问题,组合总和,子集问题的区别。为什么排列问题不用 startIndex。

2024-05-24 09:29:32 560

原创 代码随想录算法训练营第三十天 | 93.复原IP地址、78.子集、90.子集 II

找子集其实和找组合差不多,我感觉就是组合加遍历,比如在n个数里找0个,找1个,找2个,直到在n个数里找n个。(当然Carl哥不是这么讲的)Carl认为子集问题就是把树的所有节点都收集起来,每一个节点都是答案。其实和前面的分割回文串差不多,就是在判断是否剪枝和终止条件上不太一样,如果当前分割出的ip地址不符合要求就剪枝,如果四段都分出来就return。大家之前做了 40.组合总和II 和 78.子集 ,本题就是这两道题目的结合,建议自己独立做一做,本题涉及的知识,之前都讲过,没有新内容。

2024-05-22 16:41:41 283

原创 代码随想录算法训练营第二十九天 | 39.组合总和、40.组合总和 II、131.分割回文串

拿着笔画一画其实可以知道大概,看图大概就可以看懂了,横向使用for循环,判断每一层切割位置,纵向是递归在当前这种切割的情况下后面的字符串的分割。每一个元素用过就不能再用了,而且每一层里面不能取重复的数。你知道这个任务是几号应该完成的吗,15号,你要不要看看这篇文章是什么时候发出来的。注意题目中给我们 集合是有重复元素的,那么求出来的 组合有可能重复,但题目要求不能有重复组合。本题较难,大家先看视频来理解 分割问题,明天还会有一道分割问题,先打打基础。本题开始涉及到一个问题了:去重。事情真是太多了,不扯了。

2024-05-22 09:58:16 339

原创 代码随想录算法训练营第二十八天 | 216.组合总和 III、17.电话号码的字母组合

组合类的题目都差不多的,无非现在一个电话按钮上有多个字母,把数据集,res列表和chosen列表放到__init__(self)初始化函数里。就是一位一位数来判断,每一位的取值用的是for循环,然后在for循环里面嵌套递归函数,遍历下一层。,不理解的去看我的上一条博客,里面我解释了怎么推导的,再不懂可以看上条博客里的链接。强烈建议看看我上一篇里面的基础介绍,我觉得Carl哥说的很对,本题大家刚开始做会有点难度,先自己思考20min,没思路就直接看题解。如果把 组合问题理解了,本题就容易一些了。

2024-05-15 16:35:25 373

原创 代码随想录算法训练营第二十七天 | 理论基础、77. 组合

(可以自己在纸上模拟一下,比如9个数取4个,最开始9-4=5,5+2=7,因为左闭右开,所以最高取到6,刚刚好6,7,8,9是能取到的最大的四位数了。图中要在1,2,3,4,,四个数里取4个数,当第一个取2时就不继续递归了,因为第一个数取2后面能取的数就剩3,4,怎么取都取不满4个数,就没必要继续递归了,进行剪枝。其实在讲解二叉树的时候,就给大家介绍过回溯,这次正式开启回溯算法,大家可以先看视频,对回溯算法有一个整体的了解。求组合的题目上次备考蓝桥杯时已经学过了,只能说我的知识迁移能力太弱了。

2024-05-15 14:35:16 567

原创 代码随想录算法训练营第二十四天 | 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

事实证明思路很重要,要像高中数学那样学会分类讨论,我看了Carl哥的5种分类情况后自己框框就把代码写出来了,一次通过(每日嘻嘻1/1)这道题有个很神奇的解法,Carl哥没有讲具体怎么推导,我也举不出反例,欢迎知道为什么的评论区告诉我。本题比想象中的简单,大家可以先自己想一想应该怎么做,然后看视频讲解,就发现 本题为什么比较简单了。相对于 二叉树的最近公共祖先 本题就简单一些了,因为 可以利用二叉搜索树的特性。还有一种通用的,看不懂可以打开链接看看。相对于 插入操作,本题就有难度了,涉及到改树的结构。

2024-05-15 10:21:03 251

原创 代码随想录算法训练营第二十五天 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树、总结篇

代码随想录回顾了所有的二叉树题目,文末还有一张思维导图,记录了所有二叉树的解题策略。

2024-05-14 19:19:45 264 2

原创 代码随想录算法训练营第二十三天 | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先

这里首次引入了pre指针,采用的还是二叉树的中序遍历,每次和前一个数进行比较,如果一样,count就+1,每层遍历时在遍历中间节点后更新出现次数最大的数,注意每次更新最大的数需要把原来的res[ ] 清空,因为原来里面装的不是出现频率最大的数了。这道题使用的是后序遍历,如果遍历到当前节点就是p或者q就返回当前节点,层层往回传,最后会传到根节点。(因为是后序遍历,哪怕找到了答案也要遍完的)(我知道我这么讲大家根本听不懂,所以点开视频看吧,Carl哥讲的超级nice,再配合代码应该可以看懂)

2024-05-13 20:14:29 342

原创 代码随想录算法训练营第二十二天 | 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

咳咳,首先,我写题时没注意看这是二叉搜索树了,(其实是我忘了什么是二叉搜索树了。这次是一起操作两个二叉树了, 估计大家也没一起操作过两个二叉树,也不知道该如何一起操作,可以看视频先理解一下。这道题和我们学院自己的OJ上的第一题基本一模一样,就是一直递归,只要坚持左闭右开的原则,问题不大。样例中最小节点 可能是int的最小值,如果这样使用最小的int来比较也是不行的。但本题是有陷阱的,可以自己先做一做,然后在看题解,看看自己是不是掉陷阱里了。要知道中序遍历下,输出的二叉搜索树节点的数值是有序序列。

2024-05-10 20:50:30 1085

原创 代码随想录算法训练营第十九天 | 104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

深度和高度是不一样的,深度是从上面的根节点往下数,高度是从下面叶子节点往上数,所以分别适合采用前序遍历和后序遍历。采用因为是求深度,所以采用前序遍历。先判断最左边和最右边是不是一样深度,一样直接按满二叉树算,不一样就一直递归下去。大家 要先看视频讲解,就知道以上我说的内容了,很多录友刷过这道题,但理解的还不够。什么是深度,什么是高度,如何求深度,如何求高度,这里有关系到二叉树的遍历方式。先看视频讲解,和最大深度 看似差不多,其实 差距还挺大,有坑。需要了解,普通二叉树 怎么求,完全二叉树又怎么求。

2024-05-10 09:48:16 802

原创 代码随想录算法训练营第二十一天 | 513.找树左下角的值、112. 路径总和、113.路径总和 II 、106.从中序与后序遍历序列构造二叉树、105.从前序与中序遍历序列构造二叉树

不过还是得学一下用递归解决,用前序中序后序都可,只要是优先处理左节点就可以。112,和113还是有点区别的,112只要找到一个满足就返回,113要找到所有,不得不说代码一精简完全看不出原来的递归逻辑。学过数据结构的人应该很好理解为什么是那么切割的,不太了解的可以先看看链接。106.从中序与后序遍历序列构造二叉树,105.从前序与中序遍历序列构造二叉树 一起做,思路一样的。本题 又一次设计要回溯的过程,而且回溯的过程隐藏的还挺深,建议先看视频来理解。本题算是比较难的二叉树题目了,大家先看视频来理解。

2024-05-09 21:56:30 468

原创 代码随想录算法训练营第二十天 | 110.平衡二叉树、257.二叉树的所有路径、404.左子叶之和

这道题要判断平不平衡是从最下面开始判断,所以应该用后序遍历(左右根),每层递归判断以当前节点作为根节点的子树是不是平衡树。用三部曲来判断:1、明确递归函数的参数和返回值参数:当前传入节点。返回值:以当前传入节点为根节点的树的高度。2、明确终止条件递归的过程中依然是遇到空节点了为终止,返回0,表示当前节点为根节点的树高度为0。3、明确单层递归的逻辑如何判断以当前传入节点为根节点的二叉树是否是平衡二叉树呢?当然是其左子树高度和其右子树高度的差值。

2024-05-08 10:22:16 326 1

原创 代码随想录算法训练营第十八天 | 102.二叉树的层序遍历、226、翻转二叉树、101.对称二叉树

差一点就想出来了,大体思路是对的,一开始不知道对空节点怎么进行操作,链接里是if 非节点就在列表里加入None(没错,就是这么简单的问题我也做不对,一看就会,一些就废是我了)。哈哈哈,这道题我是凭直觉写的,直接就想着不就每一层左右互换就好了,结果一把就过。全做完的,确实本质都是相通的,直接复制粘贴微调代码就可以了。这道题目 一些做过的同学 理解的也不够深入,建议大家先看我的视频讲解,无论做过没做过,都会有很大收获。看完本篇可以一口气刷十道题,试一试, 层序遍历并不难,大家可以很快刷了十道题。

2024-05-06 19:33:32 176

原创 代码随想录算法训练营第十四天 | 理论基础、递归遍历、迭代遍历、统一迭代(144.二叉树的前序遍历、94.二叉树的中序遍历、145.二叉树的后序遍历)

目录题目链接理论基础递归遍历 (必须掌握)递归遍历思路递归遍历代码迭代遍历 (基础不好的录友,迭代法可以放过)前序迭代遍历思路前序迭代遍历代码中序迭代遍历思路中序迭代遍历代码后序迭代遍历思路后序迭代遍历代码统一迭代 (基础不好的录友,迭代法可以放过) 递归遍历是最容易写的二叉树遍历方法了,其实就是三行代码顺序来回调换而已。 迭代遍历 (基础不好的录友,迭代法可以放过)前序迭代遍历思路 迭代本质是用栈。其中先序遍历和后序遍历代码差不多,中序遍历需要额外记思路。

2024-05-01 22:30:48 443

原创 代码随想录算法训练营第十三天 | 239.滑动窗口最大值、347.前K个高频元素、栈与队列总结

代码随想录栈和队列在整个代码随想录里其实只排在第三章,从明天开始就是二叉树了,实话说二叉树也还不是最难的地方,(数据结构与算法都学过了),等刷到后面回溯、贪心、动态规划那才能切身体会有多痛苦。。。

2024-04-29 21:31:31 557

原创 代码随想录算法训练营第十一天 | 20.有效的括号、1047删除字符串中的所有相邻重复项、150.逆波兰表达式求值

Carl代码写的比我好,就是利用栈, 思路大体差不多,遇到 “(, {, [ ” 对应入栈 “), }, ]”;要知道栈为什么适合做这种类似于爱消除的操作,因为栈帮助我们记录了 遍历数组当前元素时候,前一个元素是什么。大家先自己思考一下 有哪些不匹配的场景,在看视频 我讲的都有哪些场景,落实到代码其实就容易很多了。还是利用栈,每次都和栈顶元素比较,一样就删去,最后返回栈中元素。本题不难,但第一次做的话,会很难想到,所以先看视频,了解思路再去做题。150. 逆波兰表达式求值。

2024-04-28 21:57:36 290

原创 代码随想录算法训练第十天 | 栈与队列理论基础、232.用栈实现队列、225.用队列实现栈

因为五一调休加上学院王者比赛还有这两天忙着交大创中期检查材料,好像两天没有更新了。今天开始栈和队列的章节。

2024-04-28 19:38:34 288 2

原创 代码随想录算法训练营第九天 | 28.实现strStr()、459.重复的字符串、字符串总结、双指针回顾

比较简单,大家读一遍就行代码随想录。

2024-04-25 21:57:05 405 1

原创 代码随想录算法训练营第八天 | 344.反转字符串、541.反转字符串II、卡码网:54.替换数字、151.翻转字符里的单词、卡码网:55.右旋转字符串

我的思路是把字符串长度先和2k进行取余的操作,得到前面的整数段和后面的小段,对前面的整数段使用for循环,步长是2k,在每一次循环中对前k个元素进行反转。建议: 本题是字符串基础题目,就是考察 reverse 函数的实现,同时也明确一下 平时刷题什么时候用 库函数,什么时候 不用库函数。建议:这道题目基本把 刚刚做过的字符串操作 都覆盖了,不过就算知道解题思路,本题代码并不容易写,要多练一练。建议:本题又进阶了,自己先去独立做一做,然后在看题解,对代码技巧会有很深的体会。我的一坨,直接看链接吧。

2024-04-24 19:53:39 1007

原创 代码随想录算法训练营第七天 | 454.四数相加、383.赎金信、15.三数之和、18.四数之和

这道题把给的四个数组分成两两一份,用两个两层的for循环,先把前面两个数组相加有可能出现的和存储到字典里,在计算后面两个数组里两两相加的和,根据相加等于0的规则,判断后面这个和的负数在不在字典里。建议:本题虽然和 两数之和 很像,也能用哈希法,但用哈希法会很麻烦,双指针法才是正解,可以先看视频理解一下 双指针法的思路,文章中讲解的,没问题 哈希法很麻烦。写完三数之和后,我坐在了图书馆的沙发上,想着难道还要两个left指针,还是要在数组中间在搞一支指针,(原谅我融会贯通能力差),想了很久才悟了,哦~

2024-04-24 18:25:12 369

原创 代码随想录算法训练营第六天 | 242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和

哈希表理论基础建议:大家要了解哈希表的内部实现原理,哈希函数,哈希碰撞,以及常见哈希表的区别,数组,set 和map。什么时候想到用哈希法,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。这句话很重要,大家在做哈希表题目都要思考这句话。当我们遇到了要快速判断一个元素是否出现集合里时,就要考虑哈希法。——Carl。

2024-04-23 21:49:48 888

原创 代码随想录算法训练营第五天

周日打烊(虽然今天是周一了)

2024-04-22 21:35:42 336

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

一开始想的和Carl哥的想法差不多,但是具体几个结点之间的赋值先后顺序还是很容易混乱,加上我这菜的一批的编码能力,还是没能自己完成。经过一番胡乱思考,我以为可以先遍历一次,看看这个链表有多长,然后再遍历一次正着数到我要删的那个节点,把他删掉。我后知后觉才发现,那。首先注意,相交不是指值相等,而是指两个结点指针相等(指针相等,值肯定也相等,反过来就不一定了)。双指针的操作,要注意,删除第N个节点,那么当前遍历的指针一定要指向第N个节点的前一个节点。这道题如果链表有给前驱节点就很容易了,关键是没有啊家人们!

2024-04-22 21:30:01 790

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

Carl的答案就是常规答案,翻转指针,维护三个变量,pre,cur,temp,注意要先把cur.next赋值给temp,不然后面的结点全都索引不到了。我第一反应是把所有元素存进一个列表里,然后用reverse()函数反转后一个个塞回去(笑晕了) ,后面一想就知道不对,数据量大一点,这要存到什么时候。麻了,这两天又是王者打比赛,又是算法训练营刚起步,又是补打卡的一天,趁星期天没有任务把星期六的补补吧。如果,你也是小白,那么,我觉得,这个思路,泰裤辣(bushi)建议:了解一下链接基础,以及链表和数组的区别。

2024-04-21 00:07:16 530

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

对原来的数组采用双指针法,一个指针在原数组最前面,一个在最后面,每一次比较一下哪个数的平方更大,将大的写到result的最后面,不断循环,结束。这题没有套路,没有算法, 理清逻辑,Carl哥说得对,坚持循环不变量原则,每一条边都坚持左闭右开原则,按照两层for循环,第一层循环,控制矩阵画到第几圈由外到内一圈圈画,第二层for循环,控制每次画四条边。我写的代码有点乱,建议直接看上面的文章讲解。题目建议: 本题关键在于理解滑动窗口,这个滑动窗口看文字讲解 还挺难理解的,建议大家先看视频讲解。

2024-04-20 22:59:59 1046

原创 代码随想录算法训练营第一天 | LeetCode704.二分查找、LeetCode27.移除元素

二分法和双指针法的应用

2024-04-18 20:59:56 358

空空如也

空空如也

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

TA关注的人

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