- 博客(52)
- 收藏
- 关注
原创 代码随想录最后一天!
我是一名普通二本的学生,由于高考的失利(指的是数学考了53分),所以一直对数学有了一种恐惧,不敢直面他,但是我接触算法后,我发现任何的事务都与数学有关,并且任何事务都可以把他抽象成一个个的数学模型和数学公式。现在的我虽然只刷了198道题目,竞赛的分数也很低,但是我对各种题型的模板已经有了一定的印象,这对我在解题的时候很有帮助,能够使我很快的抽象题目为数学模型。而且我也有二刷的打算,来继续为未来的考研、就业的思维逻辑打下扎实的基础。其中有的写的精细,有的潦草,但是都是我一路走来的脚步。
2024-05-07 15:14:44
252
原创 代码随想录第62天 | 503.下一个更大元素II 、 42. 接雨水
今天的主题还是单调栈,主要思考方式判断怎么利用这个栈,来实现记录数据的问题;
2024-05-06 17:50:42
230
原创 代码随想录第61天 | 739. 每日温度 、 496.下一个更大元素 I
首先需要定义一个栈,确定他是升序还是降序,在这里我们发现我们需要比较的是比当前温度大的位置,所以我们需要去升序排列;然后还是使用stack存储nums2中的下标,升序排列,还是寻找的是比当前元素大的值;就是三重循环,一层一层的套,第一层确定目标值,第二层找目标值,第三层找,目标大的值;单调栈的作用就是将你之前遍历过的数组以单调的形式存到栈中,方便对数据进行判断;其次是添加逻辑,分为两种情况,一种相等,一种小于当前温度,那就添加,;而且还要确定存入的是什么,我们需要求的是距离的天数,所以存下标;
2024-05-06 00:50:14
263
原创 代码随想录第60天 | 647. 回文子串 、 516.最长回文子序列
转眼间两个月已经过去,五一休息了三天,今天将要结束动态规划了。今天的主题是用dp解决回文子串;
2024-05-05 00:56:12
404
原创 代码随想录第56天 | 583. 两个字符串的删除操作 、 72. 编辑距离
今天的主要内容还是编辑距离(字符串的删除);今天的多了一些条件,不再只是一个匹配字符串和一个标准字符串了,而是两个字符串去匹配,找到两个相等的部分之后去返回修改的次数;这里也是两种情况,但是在不相等的情况下出现了两种情况,一个是删除word1中的字符串另一个是删除word2中的字符串;我们永远也不会失去那些曾尽情享受过的东西,因为我们深爱的一切都会成为我们自身的一部分。这里和上一次的不同子序列相同,只是返回值的类型不同罢了;使用的还是长度+1的字符串数组,方便初始化;二、两个字符串的删除操作。
2024-04-30 15:08:32
225
原创 代码随想录第53天 | 1143.最长公共子序列 、 1035.不相交的线 、 53. 最大子序和
参考文献:代码随想录;几天的主题主要还是和子序列串相关的;还是使用dp来解决问题。
2024-04-27 18:58:59
280
原创 代码随想录第52天 | 300.最长递增子序列 、 674. 最长连续递增序列 、 718. 最长重复子数组
参考文献:代码随想录;今天主要是动态规划的求子序列的题目;关于这个主题主要还是利用动态规划来寻找最长的子序列;
2024-04-26 17:21:10
361
原创 代码随想录第51天 | 309.最佳买卖股票时机含冷冻期 、 714.买卖股票的最佳时机含手续费
今天还是买卖股票,只是又多了一些条件。一个是含有冷冻期,在冷冻期期间不可出售股票;我们直接开始做题吧!
2024-04-25 17:18:07
394
原创 代码随想路第50天 | 123.买卖股票的最佳时机III 、 188.买卖股票的最佳时机IV
首先我们要知道,这里一共有五种状态:无操作、在第i天第一次持有、在第i天第一次出售、在第i天第二次持有、在第i天第二次出售。所以我们的dp数组是二维的,行记录天数,列记录第i天发生的状态;今天的主题还是买股票,所以回顾一下昨天的递推公式dp[i][0] = max(dp[i - 1], dp[i - 1][1] + price[i])在最后的返回时可以做一个小小的优化,就是把找最大值改为:dp[price.size() - 1][4];首先这个题目的思路和前两个题目的思路大差不差,只是多了几种状态。
2024-04-24 19:13:01
434
原创 代码随想录第29天 | 121. 买卖股票的最佳时机 、 122.买卖股票的最佳时机II
所以递推公式就是dp[i][0] 就可以由dp[i - 1][0]或者-prices[i]花掉买股票的钱,(我最开始的时候写的是dp[i - 1][1] - proces[i]这里就变成了多次买卖股票了!dp[i][0] = max(dp[i -1][0], dp[i - 1][1] - prices[i]),这里买股票的时候就需要与之前不只有股票的利润就行运算了,而之前没有持有股票的话,那就是利润为0,因为只允许买卖一次;不持有股票也分为两种,当天卖出了股票和之前就没有持有股票;二、买卖股票的最佳时机。
2024-04-23 12:33:51
312
原创 代码随想录第48天 | 198.打家劫舍 、 213.打家劫舍II 、 337.打家劫舍III
首先是dp数组,其实这里的dp数组与其说是dp数组,更可以把他看作一个标记:分为dp[2],0代表不偷该节点,1代表偷该节点;所以我们围绕这个来创建了一个dp数组dp[i]:在第i家屋子所能获得的最大财物为dp[i];当我们偷当前这家,那么我们邻居就不能再偷了:dp[i -2] + nums[i](价值);我一开始的思路是打算用背包思路做的,,,发现现在已经被背包洗脑了。(2)包含头部,不包含尾部,那也可以用198的思路去做,就不会成环;当被偷时,它的邻接就不会被偷了,当不被偷是他的邻居可能。
2024-04-22 21:50:29
425
原创 代码随想录第46天 | 139.单词拆分 、 多重背包
外层遍历的是“背包”的大小,内层遍历的是物品,而且只要找到匹配合适就直推出内层循环,便可以实现重复使用;与01背包差不多,多重背包的含义就是有n种物品,每个物品可以使用m次,这就构成了多重背包;因为返回值是bool类型,然后背包的大小和物品也有些抽象,所以我们需要更具抽象思维;这里dp的含义是:在从0到i的字符串下,dict是否能组成该字符串;最大的区别就是有了第三层遍历物品多次的循环,来达到重复使用的目的;这个题目的dp数组是第一次见:bool类型;今天的主题是复习01背包加上了解多重背包;
2024-04-20 18:09:53
301
原创 代码随想录第45天 | 70. 爬楼梯 (进阶) 、 322. 零钱兑换 、 279.完全平方数
又是一个小细节和难点,先说内部递推公式,里面就是从第i个阶梯下有多少种方法,再加上i-j的阶梯处有几种方法。这一个题目首先要弄清楚谁是背包,谁是物品,我一开始就弄反了,结果就出错了,还有递推公式是怎么来的。这个dp数组表示的是在所需面额为j的情况下,组成该面额的硬币最小数为dp[j];这是先遍历种类,再遍历背包,注意这里是从小到大遍历背包,说明可以重复的利用硬币;n为楼梯的结束,默认初始化为0,这里就是一个思想,楼梯为阶数为背包的容量;先便利的背包,再遍历的物品,就是排列问题,每一种走的方式都不一样;
2024-04-20 01:07:53
501
原创 代码随想录第44天 | 完全背包 、 518. 零钱兑换 II 、 377. 组合总和 Ⅳ
今天的主题是动态规划中的完全背包问题,完全背包的与01背包的区别是:完全背包:可以里面的物品可以使用无数次;01背包:里面的物品是允许使用一次;
2024-04-18 22:01:22
644
原创 代码随想录第43天 | 1049. 最后一块石头的重量 II 、 494. 目标和 、 474.一和零
这个题目的思路还是比较活跃,比拆分数字活的多,数学毕竟是通过实物抽象出来的;首先要知道的思路是当两边的石头重量相等时,这样返回的结果就是0,所以要尽量把石头分为重量接近两堆,然后再进行碰撞,就能销毁的更多;这就和昨天的题目如出一辙了;因为这里的石头重量最大时15001,所以就可以设置为这个,这里还包含了 初始化,那就是全部初始化为0。因为这个在递推公式中它是通过比较大小来去确定的,而且重量也没有负数,所以设置为0,这里的下标表示背包的大小,整体表示价值;// 4、递推公式,与之前的分割数字相同。
2024-04-18 01:33:20
578
原创 代码随想录第41天 | 343. 整数拆分 、 96.不同的二叉搜索树
今天的动态规划比较抽象,做好心理准备吧!回忆一下动态规划五部曲:1、创建并明确dp数组的含义;2、初始化dp数组;3、确定推导公式;4、确定遍历顺序;5、打印dp数组;
2024-04-15 21:45:45
274
原创 代码随想录第39天 | 62.不同路径 、 63. 不同路径 II
(4)遍历顺序:很显然,我们是要慢慢的积累我们不同路径的数量,所以是从最小的地方开始,但是不是用上边界和左边界,而是从[1][1]的地方开始;(2)初始化:我们发现,机器人只允许向右或者向下移动,所以在[i][0]上面的情况全是1,以及[0][j]也全是1,所以这就是初始化;(1)dp数组,由于这是一个二维图,所以需要创建一个二维的dp数组,i,j分别代表一个点位,dp[i][j]代表到达该点的位置;2、如果上方有障碍物,左边没有:则只累加左边的pd[i - 1][j]数组的值;
2024-04-13 17:47:44
336
原创 代码随想录第38天 | 509. 斐波那契数 、 70. 爬楼梯 、746. 使用最小花费爬楼梯
今天是动态规划的第一天,动态规划的五个步骤是:1、dp数组的定义,以及下标的含义;2、递推公式;3、dp数组如何初始化;4、遍历顺序;5、打印dp数组(debug);
2024-04-13 00:28:47
261
原创 代码随想录第36天 | 738.单调递增的数字 、 968.监控二叉树
今天主要考察的是贪心,今天只有两道题目,但是都比较的难,所以我们一起来细看一下吧!
2024-04-11 21:30:07
333
原创 代码随想录第36天 | 435. 无重叠区间 、 763.划分字母区间 、 56. 合并区间
(2)之后再次对字符串进行遍历,通过两个指针,去分割字符串,其中匹配的条件就是当i == right的时候就说明这个字符串已经到了最末尾的位置了,就可以划分了;今天的主题是贪心算法中的重叠区间,就像昨天的扎气球问题,就是通过排序,然后将区间重叠起来,然后更具边界值判断这个区间是否重叠。(2)然后遍历intervals数组,找出重叠的区间,如果出现重叠的区间那就把找出来,找到一个就删除++就ok了;(2)然后就是设置两个边界,left和right,就设置为第一个数组的左右边界;参考文献:代码随想录。
2024-04-10 17:25:13
398
原创 代码随想录第35天 | 860.柠檬水找零 、 406.根据身高重建队列 、 452. 用最少数量的箭引爆气球
除此之外,那就是重合,那就可以更新右边界去比较了,在前一个气球的右边接和后一个气球的右边界选取一个最小的值作为新的边界即可;(2)然后用在排序的时候身高相同,那么就只需要比较后面的k的大小了,k小的排前面,因为后期的插入需要用到k;这里按照的是左边界,以小到大;一开始我是没有什么正确思路的,但是我一问GPT教授时,看到两个变量,我就明白了。但是这里的insert函数非常消耗时间,所以推荐使用的是链表,可以节省很多的时间;(2)循环遍历bills 分为三种情况,分别是20,10,5,分别做不同的处理;
2024-04-09 21:57:33
470
原创 代码随想录第34天 | 1005.K次取反后最大化的数组和 、 134. 加油站 、 135. 分发糖果
今天的主题是贪心算法,主要是思想就是局部最优解到全局最优解,但是没有一个固定的模板。那就开始今天的刷题之旅吧!
2024-04-09 00:14:13
420
原创 代码随想第31天 | 122.买卖股票的最佳时机II 、 55. 跳跃游戏 、 45.跳跃游戏II
今天主要还是贪心,但是是比较难想到的题目,不管那么多吧,直接做吧!
2024-04-06 18:30:57
327
原创 代码随想录第31天 | 455.分发饼干 、376. 摆动序列、53. 最大子序和
参考文献:代码随想录今天的内容是贪心算法,这个算法分为两个极端,一个极端是很简单,靠常识就可以解出来,另外一个是,你怎么想也想不出来,只能看题解的那种。and对第一天和第二天的内容进行复习;
2024-04-05 23:01:24
421
原创 代码随想录第30天 | 332.重新安排行程、51. N皇后、37. 解数独
这个其实比较好理解,就是简单的从map数组里面取对应的到达机场,以及查看是否还有次数,就可以解决这个问题了。里面嵌套的就是添加、递归、回溯了。这个原理比较好理解(ticketNum是航班次数),当我们画图发现,航班次数等于航线机场数量-1 ,这个模拟一下就会发现了,就不多了说。转眼见就已经一个月了,训练营已经过了一半了,今天地题目还是关于回溯算法,只是这是四道困难题目,然我们来好好研究一下吧!这个map是可以做增删的,外层的map是无序的,里层的map是按照键的大小进行排序的,这个可以解决题目中的。
2024-04-04 23:48:44
262
原创 代码随想录第29天 | 491.递增子序列 、 46.全排列 、 47.全排列 II
今天的三个题目还是关于回溯算法的,这三个题目有着新的三个知识是新的去重方式,以及不一样的收集方式,我们一起来看看吧!二、递增子序列。
2024-04-04 00:01:01
1012
原创 代码随想录第28天 | 93.复原IP地址 、 78.子集 、 90.子集II
今天的主题内容是回溯算法,这一章的干货很多,我需要慢慢的品味,不单单只是表象,还需要研究深层原理。
2024-04-02 22:37:11
356
原创 代码随想录第27天 | 39. 组合总和、40.组合总和II、131.分割回文串
今天的主题还是回溯算法,还是根据那个backtracking模板,但是今天会涉及到去重和一些小细节的问题。
2024-04-02 00:31:09
311
原创 代码随想录第25天 | 组合总和||| 、 电话号码的字母组合
今天的还是回溯算法,主要用到了昨天的回溯组合方法和巧妙思路方法,让我们继续为算法打基础吧!
2024-03-30 13:12:33
359
原创 代码随想录第24天 | 回溯算法理论、组合
今天的主题是回溯算法,二叉树章节终于刷过去了,今天的主要任务是了解回溯算法和他的作用,以及模板。回溯算法的主要作用是解决如下问题:今天所解决的问题就是组合问题。模板看着不难,那就让我们来解决今天的题目吧!
2024-03-29 14:50:32
316
原创 代码随想录第22天 | 修剪二叉搜索树 、将有序数组转换为二叉搜索树 、把二叉搜索树转换为累加树
今天的题目主要是对二叉搜索树的修剪和创建以及转化的操作,使其对二叉搜索树更加的了解,操作更加熟悉。
2024-03-28 00:22:14
282
1
原创 代码随想录第21天 | 二叉搜索树的最近公共祖先 、二叉搜索树中的插入操作 、删除二叉搜索树中的节点
这是第八天二叉树了,感觉对自我的提升还是有很多的,但是还需多多刷题,掌握二叉树技巧。
2024-03-27 15:03:40
365
原创 代码随想录第21天 | 二叉搜索树的最小绝对差、二叉搜索树中的众数 、二叉树的最近公共祖先
今天还是二叉树,刷的是新知识,主要涉及到二叉树的双指针遍历操作。话不多说,直接开始吧!
2024-03-26 21:49:32
912
原创 代码随想录第21天 | 654.最大二叉树 、 617.合并二叉树 、 700.二叉搜索树中的搜索 、98.验证二叉搜索树
今天还是二叉树,二叉树真是一个很大的章节。今天刷的题目并不简单,所以我继续参考卡哥的文献了。
2024-03-25 22:32:05
422
1
原创 代码随想录第18天 | 找树左下角的值 、 路径总和 、 从中序与后序遍历序列构造二叉树
今天是周六,还是二叉树,不过这次的题目又相对于前两天又有了一些提升。所以就慢慢来体会递归的细节吧!
2024-03-23 19:24:02
676
1
原创 代码随想录第17天 | 110.平衡二叉树、 257. 二叉树的所有路径 、 404.左叶子之和
今天的主题还是二叉树,主要是对二叉树的递归进行巩固,并了解平衡二叉树,平衡二叉树:平衡二叉树是一种二叉树,其中每个节点的左子树和右子树的高度差不超过1。这种平衡性质可以确保在最坏情况下,树的高度为log2(n),其中�n是树中节点的数量。这样可以保证在进行搜索、插入和删除等操作时,时间复杂度为O(log(n)),使得平衡二叉树在实际应用中具有较高的效率。
2024-03-22 17:49:05
313
1
原创 代码随想录第16天 | 104.二叉树的最大深度、 111.二叉树的最小深度 、222.完全二叉树的节点个数
今天的题目是昨天层序遍历的递归版本,从对栈和队列的应用转到更加简便的递归操作,是非常有助于对栈堆的理解的。
2024-03-21 19:37:34
390
1
原创 代码随想录第15天 | 层序遍历 、 226.翻转二叉树 (优先掌握递归) 、 101. 对称二叉树 (优先掌握递归)
今天的题目比较多,但是应该都不会很难,我记得在我寒假刷的时候,刷了很久二叉树,发现有一段时间的i题目类型很类似(我大概一天一到两题),所以耽搁了比较久的时间,这次跟着代码随想录训练营,应该可以很快把二叉树给过掉。
2024-03-20 23:45:24
811
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人