自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录一刷总结

拿了当前物品,因为会占背包空间,势必前面的物品要少拿,那么拿了当前物品的总价值高,还是多拿前面物品不拿当前物品的总价值高,就需要比较后做取舍了,这就是01背包的核心思想。以前啊,递归这个东西,我怎么都理解不了,向老师提问,总是得到一句笼统的“自己调用自己”,对于其中的工作机理,是完全不了解。现在,终于有了比较清晰的理解,用自己的话来说就是,调用递归函数是一次次压入栈中,不停的调用和返回,最后得到最先调用时候的需要获取的值。研一的时候,虽然也上过算法设计与分析的课,但完全是半懂不懂的状态,期末考试全靠背。

2023-08-08 02:28:57 662

原创 代码随想录算法训练营第六十天 | 84.柱状图中最大的矩形

【代码】代码随想录算法训练营第六十天 | 84.柱状图中最大的矩形。

2023-08-04 01:15:02 221

原创 代码随想录算法训练营第五十九天 | 503.下一个更大元素II、42. 接雨水

【代码】代码随想录算法训练营第五十九天 | 503.下一个更大元素II、42. 接雨水。

2023-08-04 01:13:22 187

原创 代码随想录算法训练营第五十八天 | 739. 每日温度、496.下一个更大元素 I

【代码】代码随想录算法训练营第五十八天 | 739. 每日温度、496.下一个更大元素 I。

2023-08-04 01:11:24 299

原创 代码随想录算法训练营第五十七天 | 647.回文子串、516.最长回文子序列

【代码】代码随想录算法训练营第五十七天 | 647.回文子串、516.最长回文子序列。

2023-08-04 01:04:48 288

原创 代码随想录算法训练营第五十六天 | 583.两个字符串的删除操作、72.编辑距离

【代码】代码随想录算法训练营第五十六天 | 583.两个字符串的删除操作、72.编辑距离。

2023-08-04 01:01:10 181

原创 代码随想录算法训练营第五十五天 | 392.判断子序列、115.不同的子序列

【代码】代码随想录算法训练营第五十五天 | 392.判断子序列、115.不同的子序列。

2023-08-04 00:57:05 131

原创 代码随想录算法训练营第五十三天 | 1143.最长公共子序列、1035.不相交的线、53.最大子数组和

【代码】代码随想录算法训练营第五十三天 | 1143.最长公共子序列、1035.不相交的线、53.最大子数组和。

2023-08-03 11:10:42 248

原创 代码随想录算法训练营第五十二天 | 300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组

【代码】代码随想录算法训练营第五十二天 | 300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组。

2023-08-01 11:14:46 144

原创 代码随想录算法训练营第五十一天 | 309.买卖股票的最佳时机含冷冻期(需要复习)、714.买卖股票的最佳时机含手续费

第i天不持有且不冷冻,说明在第i-1天没有进行任何操作,第i-1天没有任何操作对应非冷冻期dp[i - 1][2]或冷冻期dp[i - 1][1]第i天不持有且冷冻,说明第i-1天持有股票并刚执行完卖出,收益为第i-1天持有股票的最大收益+第i天卖出股票的正收益prices[i];第i天持有股票的最大收益等于:第i-1天就已经持有的;或在第i天买入的,那么第i-1天的状态为不持有股票且不处于冷冻期;1、不持有股票的状态dp[i][1]在取最大值中,在第i天当天卖出股票的收益需要减去手续费。

2023-07-26 21:11:19 120

原创 代码随想录算法训练营第五十天 | 123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV

本题是III的抽象,直接写出来还有点困难,想不明白的时候代入III思考一下,确定边界的值时,k用2代入一下。

2023-07-25 16:41:01 147

原创 代码随想录算法训练营第四十九天 | 121.买卖股票的最佳时机、122.买卖股票的最佳时机II

【代码】代码随想录算法训练营第四十九天 | 121.买卖股票的最佳时机、122.买卖股票的最佳时机II。

2023-07-25 16:36:12 107

原创 代码随想录算法训练营第四十八天 | 198.打家劫舍、213.打家劫舍II、337.打家劫舍III

2)不偷当前节点,能获得的最大价值为:偷或不偷左节点的最大价值+偷或不偷右节点的最大价值。(为什么是偷或不偷?1)偷当前节点,能获得的最大价值为:当前节点的价值+不偷左节点的最大价值+不偷右节点的最大价值;dp[0]=不偷当前节点获得的最大价值、dp[1]偷当前节点获得的最大价值。,则当nums.size()=1时无法对dp[1]进行操作。(同时不考虑首元素和尾元素的最大价值已经包含在两种情况中)最终根节点处,这两部分的价值取最大值。1)不考虑首元素的最大价值;2)不考虑尾元素的最大价值。

2023-07-24 15:46:32 77

原创 代码随想录算法训练营第四十六天 | 139.单词拆分

2)dp[0]不对应字符,是人为加上去的。题目中明确了是非空字符串s,测试数据中不会出现i为0的情况,因此dp[0]初始化为true是为了推导递推公式;1)先遍历背包再遍历物品,因为正确的单词拆分是强调顺序的,apple+pen+apple是正确的,而apple+apple+pen是错误的;3)遍历背包时,i从1开始。dp[1]对应第一个字符,dp[s.size()]对应最后一个字符。

2023-07-24 10:26:48 163

原创 代码随想录算法训练营第四十五天 | 70.爬楼梯、322.零钱兑换、279.完全平方数

本身j<i*i时也没有遍历的意义,空间不够怎么放咯。i开始,不需要判断j是否大于i。

2023-07-21 17:14:38 154

原创 码随想录算法训练营第四十四天 | 518.零钱兑换、377.组合总和IV

为什么先物品后背包是组合问题因为先遍历物品时,是考虑完物品i后再考虑物品i+1,物品i一定前物品i+1前被选择,去掉了他们的排序关系。为什么先背包后物品是排列问题先遍历背包容量时,在当前容量下已经尝试了所有物品,在下一个容量中依然尝试对所有物品进行考虑,物品使用的先后就产生了排序。(就像排列数每个位置可以放任何物品一样,增加了物品的排序)下次再想不明白的时候,看一看dp数组的推导就行了。

2023-07-21 16:14:18 124

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

题目链接public :i ++) {i ++) {j --) {} };

2023-07-20 21:22:56 54

原创 代码随想录算法训练营第四十二天 | 01背包问题 二维、01背包问题一维、416.分割等和子集

从计算过程中可以看出:第一次更新dp[4]的值,只放入了物品0。第二次更新dp[4]的值,只放入了物品1。第三次更新dp[4]的值,只放入了物品2。

2023-07-18 21:45:27 226

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

j的作用:用来拆分左右子树。j的作用:用来拆分i。

2023-07-17 22:22:49 91

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

2)初始化是将第一行和第一列初始化为1,因为在第一行和第一列的任意位置都只能用一种方法走到;1)对dp数组的第一行和第一列初始化时,一旦遇到障碍物,后续的元素都为0,因为都走不到了。2)给数组dp中的元素赋值,赋值为int类型的vector,元素个数为n;2)在递推的过程中,遇到障碍物就continue,dp数组的值为初始值0;1)创建一维数组dp,数组中有m个元素,元素类型是int型vector;3)给数组列中的元素赋值,即给数组中所有元素赋值,赋值为0;

2023-07-15 15:20:38 584

原创 代码随想录算法训练营第三十八天 | 509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯

【代码】代码随想录算法训练营第三十八天 | 509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯。

2023-07-14 22:22:23 136

原创 【动态调整】近期学习计划和完成情况

过一遍《C++ Primer》,看《Effective C++》、《Effective STL》王道的操作系统视频(快速过一遍)简单列一下最近的学习计划。b站的计算机网络微课堂。候杰老师的视频作补充。

2023-07-13 16:51:38 109

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

为了防止输入的数字已经是单调递增的情况下(如1234),第一个for循环没有执行,flag没有被赋值,如果flag默认值是0的话,就把所有位上的数字都赋值成9了。所有将flag放在末尾,如果flag未被赋值,那么第二个for循环也不会执行,只会将数字转化为字符串,又将字符串转化为数字,最后输出。从前往后遍历的话,会是这样的过程:332->332->322->329,但是此时2又小于第一个数字3了,正确的应该是229。2)使用flag用来标记赋值9的位置,flag的默认值为str.size()。

2023-07-13 16:12:34 31

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

重叠区间的题目总体难度不高,也比较容易理解,但有以下细节需要注意:1)不要忘记对区间排序;2)当区间长度为0时的if判断不要漏掉;3)更新区间的时候,取最大值还是最小值不要想当然。

2023-07-12 16:41:25 43

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

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

2023-07-11 22:44:02 33

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

要理解:“右和左比”的右和“左和右比”的左,是同一个元素rating[i]。这就是局部最优:保证第i个小孩得到的糖果比左右两边都多,即题意所示的相邻两个孩子评分高的糖果多。这也是为什么第二次要从后往前遍历的原因:假如第二次仍然从前往后遍历,第一次rating[5]是和rating[4]作了比较,第二次仍然是rating[4]和rating[5]作比较,没有符合题意中“比左右两边都大”的要求。

2023-07-11 22:40:42 106

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

关键是理解把利润分解成以天为单位的维度。

2023-07-10 22:00:32 133

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

本题测试样例:[-1, -1, -1, -4]一样可以通过,因为result是从无穷小开始统计最小值,遇到全是负数的数组result每记录一个负数,count都会置为0,下一层循环会比较当前负数和前一负数的大小,实质上还是记录了最大的那个负数值。

2023-07-10 21:48:58 139

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

本题比较简单,与组合问题的区别就在于for循环中i从0开始,并且用used标记使用过的元素。(组合中i从startIndex开始,用starIndex标记下一次开始的位置)并非为重复元素的标记而漏掉原本需要去重的树枝,导致结果变多。如果没有排序,以[3,0,3]为例。

2023-07-08 17:42:35 142

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

【代码】代码随想录算法训练营第二十八天 | 93.复原IP地址、78.子集、90.子集II。

2023-07-07 17:10:55 97

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

本题的整数数组candidates有重复元素,需要去重。本题整数数组中无重复元素,不需要去重操作,较为简单。首先增加一个bool类型的数组used,用来记录同一。(以下以candidates=[1,1,2]为例)上的元素是否使用过。(去重就是用used去重)还没完全明白,明天看懂了再补充。

2023-07-06 21:51:37 24

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

举个例子,k=2,当前path.size()=0,还需要2个元素,因此在下标9-(2-0)+1=8后,i最多只能取一个元素9,一定是不满足所需要元素个数的,所以i至多取到8即可(取到8还可以取8和9两个元素)。对输入数字串的遍历深度对应所需要的for循环层数,比如输入“23”,根节点向下递归两层,叶子节点就是要收集的结果集,对应两层for循环后得到的结果。k为需要的总个数,path.size()为路径中已经收集的个数,k-path.size()为还需要的元素个数。

2023-07-06 21:36:36 91

原创 代码随想录算法训练营第二十四天 | 77.组合

比如n=4,k=4的情况下,只有在搜索到1的时候,剩余还有234,可以满足条件;搜索到2,剩余只有34,一定不满足4个数的条件,可以剪去;搜索到3,剩余只有4,一定不满足4个数,可以剪去。只有在搜索到1的时候,剩余还有234,可以满足条件。所以,path.size()为已经存放的元素,k-path.size()为还需要选取的个数,n-(k-path.size())+1为至多从该位置开始搜索的元素大小(如n=4,k=3,path.size()=0,这时候至多从数字2开始搜索即可)

2023-07-04 22:45:35 30

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

【代码】代码随想录算法训练营第二十三天 | 669.修剪二叉搜索树、108.将有序数组转换为平衡二叉搜索树、538.把二叉搜索树转换为累加树。

2023-07-02 18:31:43 20

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

通过本题可以很好地体会返回值和递归函数的关系。

2023-06-28 18:19:55 140 1

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

注意要体会双指针的思想。

2023-06-27 22:32:28 50 1

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

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

2023-06-26 22:49:04 162 1

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

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

2023-06-26 22:48:48 226 1

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

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

2023-06-26 22:48:15 141

原创 代码随想录算法训练营第十六天 | 104.二叉树的最大深度、559.N叉树的最大深度、111.二叉树的最小深度

【代码】代码随想录算法训练营第十六天 | 104.二叉树的最大深度、559.N叉树的最大深度、111.二叉树的最小深度。

2023-06-22 18:35:42 206 1

空空如也

空空如也

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

TA关注的人

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