自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 代码随想录第50天 | 84.柱状图中最大的矩形

【代码】代码随想录第50天 | 84.柱状图中最大的矩形。

2023-10-23 21:11:10 262

原创 代码随想录第49天 | ● 503.下一个更大元素II ● 42. 接雨水

单调栈就是保持栈内元素有序。和栈与队列:单调队列 (opens new window)一样,需要我们自己维持顺序,没有现成的容器可以用。通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。

2023-10-23 20:19:33 104

原创 代码随想录第48天 | ● 739. 每日温度 ● 496.下一个更大元素 I

【代码】代码随想录第48天 | ● 739. 每日温度 ● 496.下一个更大元素 I。

2023-10-20 15:06:20 155

原创 代码随想录第47天 | ● 647. 回文子串 ●5. 最长回文子串 ● 516.最长回文子序列

其他情况dp[i][j]初始为0就行,这样递推公式:dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。如果s[i]与s[j]相同,那么dp[i][j] = dp[i + 1][j - 1] + 2;dp[i][j]:字符串s在[i, j]范围内最长的回文子序列的长度为dp[i][j]。dp[i][j]初始化为false。

2023-10-19 13:27:47 99

原创 代码随想录第46天 | ● 583. 两个字符串的删除操作 ● 72. 编辑距离

本题和动态规划:1143.最长公共子序列 (opens new window)基本相同,只要求出两个字符串的最长公共子序列长度即可,那么除了最长公共子序列之外的字符都是必须删除的,最后用两个字符串的总长度减去两个最长公共子序列的长度就是删除的最少步数。dp[i][0]:word2为空字符串,以i-1为结尾的字符串word1要删除多少个元素,才能和word2相同呢,很明显dp[i][0] = i。

2023-10-18 15:07:09 113

原创 代码随想录第45天 | ● 392.判断子序列 ● 115.不同的子序列

并且每一个结果都是会叠加直到结束的!如s=aaba,t=a,dp[0][0]=1,dp[1][0]=1+dp[0][0]2,dp[2][0]=dp[1][0]=2,dp[3][0]=1+dp[2][0]=3。对于不连续的子串匹配,s为主串,t为匹配串,s=abcd,t=ad时,就算s的b和t的d不匹配也没关系,把s的b、c都删了,那就匹配了!

2023-10-18 14:18:02 80

原创 代码随想录第44天 | ● 1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和 动态规划

【代码】代码随想录第44天 | ● 1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和 动态规划。

2023-10-17 22:12:27 178

原创 代码随想录第43天 | ● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组

如果定义 dp[i][j]为 以下标i为结尾的A,和以下标j 为结尾的B,那么 第一行和第一列毕竟要进行初始化,如果nums1[i] 与 nums2[0] 相同的话,对应的 dp[i][0]就要初始为1, 因为此时最长重复子数组为1。nums2[j] 与 nums1[0]相同的话。dp[i][j]都是由dp[i - 1][j - 1]推出。那么压缩为一维数组,也就是dp[j]都是由dp[j - 1]推出。也就是相当于可以把上一层dp[i - 1][j]拷贝到下一层dp[i][j]来继续用。

2023-10-13 12:53:18 81

原创 代码随想录第42天 | ● 309.最佳买卖股票时机含冷冻期 ● 714.买卖股票的最佳时机含手续费

在卖出时加一笔手续费。

2023-10-12 13:47:22 52

原创 代码随想录第41天 | 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV

【代码】代码随想录第41天 | 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV。

2023-10-11 11:34:32 66

原创 代码随想录第40天 | ● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II

由递推公式 dp[i][0] = max(dp[i - 1][0], -prices[i]);和 dp[i][1] = max(dp[i - 1][1], prices[i] + dp[i - 1][0]);那么dp[0][0]表示第0天持有股票,此时的持有股票就一定是买入股票了,因为不可能有前一天推出来,所以dp[0][0] -= prices[0];dp[0][1]表示第0天不持有股票,不持有股票那么现金就是0,所以dp[0][1] = 0;其基础都是要从dp[0][0]和dp[0][1]推导出来。

2023-10-10 16:40:33 55

原创 代码随想录第39天 | ● 198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III

如果偷第i房间,那么dp[i] = dp[i - 2] + nums[i] ,即:第i-1房一定是不考虑的,找出 下标i-2(包括i-2)以内的房屋,最多可以偷窃的金额为dp[i-2] 加上第i房间偷到的钱。从dp[i]的定义上来讲,dp[0] 一定是 nums[0],dp[1]就是nums[0]和nums[1]的最大值即:dp[1] = max(nums[0], nums[1]);从递推公式dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);

2023-10-10 14:13:18 81

原创 代码随想录第38天 | ● 完全背包 ● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ

如果求组合数就是外层for循环遍历物品,内层for遍历背包。因为先遍历物品,每个dp都是比如先第一个 第二个,有顺序的如果求排列数就是外层for遍历背包,内层for循环遍历物品。先遍历的的背包,背包容量的每一个值,都是经过 1 和 5 的计算,包含了{1, 5} 和 {5, 1}两种情况。此时dp[j]里算出来的就是排列数!

2023-10-07 14:48:15 56

原创 代码随想录第37天 | 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

一个限重的包装石头,石头有重量,有价值,怎样装最值钱dp[j] 表示:填满j(包括j)这么大容积的包,有dp[j]种方法一和零} else {i--) {j--) {

2023-10-07 01:25:51 160

原创 代码随想录第36天 | ● 01背包问题,你该了解这些! ● 01背包问题—— 滚动数组 ● 416. 分割等和子集

此时dp[j]有两个选择,一个是取自己dp[j] 相当于 二维dp数组中的dp[i-1][j],即不放物品i,一个是取dp[j - weight[i]] + value[i],即放物品i,指定是取最大的,毕竟是求最大价值,dp[j]表示:容量为j的背包,所背的物品价值可以最大为dp[j],那么dp[0]就应该是0,因为背包容量为0所背的物品的最大价值就是0。在一维dp数组中,dp[j]表示:容量为j的背包,所背的物品价值可以最大为dp[j]。在这上面完了[1,2,3,4,5,6,7],应该还有回溯可以做。

2023-10-05 20:59:10 98

原创 代码随想录第35天 | ● 62.不同路径 ● 63. 不同路径 II

dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。

2023-09-26 21:00:09 83

原创 代码随想录第34天 | 343. 整数拆分 96.不同的二叉搜索树

元素1为头结点搜索树的数量 = 右子树有2个元素的搜索树数量 * 左子树有0个元素的搜索树数量。元素2为头结点搜索树的数量 = 右子树有1个元素的搜索树数量 * 左子树有1个元素的搜索树数量。元素3为头结点搜索树的数量 = 右子树有0个元素的搜索树数量 * 左子树有2个元素的搜索树数量。递推公式: dp[i] += dp[j - 1] * dp[i - j]dp[i] : 1到i为节点组成的二叉搜索树的个数为dp[i]。因为dp[3]的dp[2]

2023-09-25 17:42:02 149

原创 代码随想录第33天 | ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯

根据dp数组的定义,到达第0台阶所花费的最小体力为dp[0],那么有同学可能想,那dp[0] 应该是 cost[0],例如 cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1] 的话,dp[0] 就是 cost[0] 应该是1。看一下递归公式,dp[i]由dp[i - 1],dp[i - 2]推出,既然初始化所有的dp[i]是不可能的,那么只初始化dp[0]和dp[1]就够了,其他的最终都是dp[0]dp[1]推出。所以初始化 dp[0] = 0,dp[1] = 0;

2023-09-08 12:51:10 94

原创 代码随想录第32天 | ● 738.单调递增的数字 ● 968.监控二叉树

98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]–,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数。

2023-09-08 12:11:37 79

原创 代码随想录第31天 | 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间

按照右边界排序,从左向右记录非交叉区间的个数。最后用区间总数减去非交叉区间的个数就是需要移除的区间个数了。>s.charCodeAt(i)是char转为。

2023-09-08 11:49:23 95

原创 代码随想录第30天 | ● 860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球

局部最优:当气球出现重叠,一起射,所用弓箭最少。全局最优:把所有气球射爆所用弓箭最少。先按升高从大到小排,如果身高一样,就按人数从小到大排队。

2023-09-08 11:33:25 83

原创 代码随想录第29天 | ● 1005.K次取反后最大化的数组和 ● 134. 加油站 ● 135. 分发糖果

首先如果总油量减去总消耗大于等于零那么一定可以跑完一圈,说明 各个站点的加油站 剩油量rest[i]相加一定是大于等于零的。每次换最小的那个数,负数换正数,正数换负数,对加起来最大都是最好的选择。每个加油站的剩余量rest[i]为gas[i] - cost[i]。第一步:将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小。先把绝对值大的负数转换了。如果全是正数了,转换最小的那个正数。第三步:如果K还大于0,那么反复转变数值最小的元素,将K用完。第二步:从前向后遍历,遇到负数将其变为正数,同时K–

2023-09-08 11:03:37 43

原创 代码随想录第28天 | 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

还是覆盖思路,不过一个覆盖就是一步,这个覆盖没有走完,那么这个覆盖就是i的长度,然后算ncover。如果ncover走完了,就return。每次移动取最大跳跃步数(得到最大的覆盖范围),每移动一个单位,就更新最大覆盖范围。不一定非要明确一次究竟跳几步,每次取最大的跳跃步数,这个就是可以跳跃的覆盖范围。那么这个问题就转化为跳跃覆盖范围究竟可不可以覆盖到终点!这个范围内,别管是怎么跳的,反正一定可以跳过来。其实跳几步无所谓,关键在于可跳的覆盖范围!加上两数相差的正数就好了。

2023-07-17 15:21:40 174

原创 代码随想录第27天 | 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和

局部最优:当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。计算起点的时候,一定是从 1 开始计算,因为负数只会拉低总和,这就是贪心贪的地方!一路加上,小于0的都按0来处理,l++如代码所示,可以不删除,i++就是了。两个数组排序排序,双指针。

2023-07-17 01:08:11 109

原创 代码随想录第26天 | ● 332.重新安排行程 ● 51. N皇后 ● 37. 解数独

如上,可以解决他给的例子(解决了字典和排序),但是不能解决[[“JFK”,“KUL”],[“JFK”,“NRT”],[“NRT”,“JFK”]],按照最小的字典来,没办法。所以另开一个数组去记载chessBoardBack = [];传到最后,chessbord回溯了,全部回到了过去。

2023-07-16 19:23:11 92

原创 代码随想录第25天 | * 491.递增子序列 * 46.全排列 * 47.全排列 II

Set去重是比较数组中存入的值,当数组内值为简单数据类型,存入的就是值本身。而二维数组存入的值为地址值,即使存入的相同,地址值也会不同。子集的方法,在返回结果时判断是否相同和是否大于,但内存和时间都很复杂。因为数组里的数不重复,想的是哈希,如果是用过的,哈希为1。但这个哈希竖着来,横着要清空,所以在pop()后要复原。的题目都是从大到小的排列好了的,这道题明显不是。法一:嘿嘿,上一题的结果拿来去重。

2023-07-13 01:46:07 121

原创 代码随想录第24天 | ● 93.复原IP地址 ● 78.子集 ● 90.子集II

放后面是因为,不影响第一个2的子集,但是后面2已经用过开头了,不能再一次了。然后其实有个条件,必须是数字,但是我在 let num = Number(s.slice(start, end + 1));子集是收集树形结构中树的所有节点的结果,而组合问题、分割问题是收集树形结构中叶子节点的结果。和 40.组合总和II 的思想一样,没用脑子cv就好。注意条件,和剪枝,可以加一些条件减少时间空间复杂度。

2023-07-10 22:30:50 179

原创 代码随想录第23天 | ● 39. 组合总和 ● 40.组合总和II ● 131.分割回文串

加在最后一排,因为【1,1,6】这个不能被省略,【1,1,6】的第2个1是在backtracking(candidates, target, i + 1, sum)被加入的,有两个1,第一个1没有没pop。递归用来纵向遍历,for循环用来横向遍历,切割线(就是图中的红线)切割到字符串的结尾位置,说明找到了一个切割方法。从树形结构的图中可以看出:切割线切到了字符串最后面,说明找到了一种切割方法,此时就是本层递归的终止条件。注意范围,我想要0123456中的【2,5】,要写slice(2,6)

2023-07-10 20:49:18 94

原创 代码随想录第22天 | ● 216.组合总和III ● 17.电话号码的字母组合

之前是数组,所以用 road.push([…现在也感觉过程和for循环大差不差。

2023-07-08 15:21:00 334

原创 代码随想录第21天 | 回溯理论基础 77. 组合

回溯法解决的问题都可以抽象为树形结构,是的,我指的是所有回溯法的问题都可以抽象为树形结构!因为回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度,都构成的树的深度。递归就要有终止条件,所以必然是一棵高度有限的树(N叉树)。

2023-07-08 13:59:25 113

原创 代码随想录第20天 |669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树

右中左的顺序相加+递归。

2023-04-18 14:56:31 38

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

删除二叉搜索树有5种方法,最后得到的结果有两种

2023-04-18 01:20:24 495

原创 代码随想录第18天 | 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先

摸到了大体思想,但是做不出来

2023-04-14 17:28:33 319

原创 代码随想录第17天 | 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

中序遍历,一直更新maxVal,一旦发现maxVal >= root->val,就返回false,注意元素相同时候也要返回false。前序遍历就行了,不管是迭代法还是回调法,但是忽略了题目中的搜索树的条件。先序遍历,然后递归,写不出来,然后我又忽略了题意,即使按我的想法做出来,//1不行 2行,直接返回2,不进行后面的节点相加操作了。//1行2不行,返回1;所有左子树和右子树自身必须也是二叉搜索树。节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。是的,二叉搜索树也可以为空!

2023-04-13 16:00:31 146

原创 代码随想录第16天 | 513.找树左下角的值 112. 路径总和 113.路径总和ii 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树

递归。

2023-04-12 19:26:56 42

原创 代码随想录第15天 | ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和

递归法

2023-04-11 15:32:08 310

原创 代码随想录第14天 | 104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数

111和222,有思路且自己写出来了。终于算二叉树上道了

2022-12-04 01:57:37 68

原创 代码随想录第13天 | 102层序遍历 226.翻转二叉树 101.对称二叉树

栈感觉就是递归的底层实现

2022-12-03 16:03:29 466

原创 代码随想录第12天 | 理论基础 递归遍历 迭代遍历 统一迭代

理解了二叉树基础

2022-12-02 11:07:06 65

原创 代码随想录第11天 | 239. 滑动窗口最大值 347.前 K 个高频元素

第二题只听懂了思路

2022-12-01 14:18:42 414

计算机网络第4章(网络层).md

计算机网络第4章(网络层).md

2022-11-15

空空如也

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

TA关注的人

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