自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

值得注意的是,在记录左边/右边第一个小于当前柱子高度的柱子坐标minleft[i]时,可以通过寻找前一个柱子,如果小于直接赋值,如果大于则可通过前一个的minleft循环直到找到目标值,这也是对比暴力法求值所减少的重复计算。个非负整数,用来表示柱状图中各个柱子的高度。先记录每一个柱子的左边第一个低于该柱子的坐标和右边第一个低于该柱子的坐标。知道思路跟42.接雨水差不多,但是还是不懂得变通,没写出来。求在该柱状图中,能够勾勒出来的矩形的最大面积。最大的矩形为图中红色区域,面积为 10。

2023-11-27 21:56:09 109

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

单调栈

2023-11-26 16:19:53 124

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

思路:使用上一题的方法用单调栈求出nums2数组中下一个元素组成的数组nums2_res,然后遍历nums1,用nums1中的元素去nums2_res中找到答案。使用&&连接两个条件时,会首先对第一个条件进行判断,第一个条件满足对第二个条件进行判断,如不满足则不对第二个条件判断。最后比对发现问题出在while(nums2[i]>nums2[st.top()&&!单调栈用于解决:一维数组寻找任一个元素的右边或者左边第一个比自己大或小的位置。如果不存在下一个更大元素,那么本次查询的答案是。

2023-11-25 14:07:53 176

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

dp[i][j]定义:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。递推公式:如果s[i]==s[j]&&(j-i<=1||dp[i+1][j-1]) dp[i][j]=true。=dp[j]时,dp[i][j]=max(dp[i+1][j],dp[i][j-1]);dp[i]==dp[j]时,dp[i][j]=dp[i+1][j-1]+2;初始化,i==j时,即一个字符的最长回文子序列长度为1。是字符串中的由连续字符组成的一个序列。

2023-11-24 16:41:44 82

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

掌握动态规划中状态转移对应的定义

2023-11-19 12:32:06 112

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

字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。初始化dp[0][j]=1:以i-1为结尾的s可以随便删除元素,出现空字符串的个数。=s[j-1]时dp[i][j]由使用s[i-1]匹配的个数决定。出现的个数,结果需要对 109 + 7 取模。写了上面那一道题再写一道思路就比较好想了。①不使用s[i-1]来匹配的匹配个数;第九章 动态规划 part15。②使用s[i-1]匹配的个数;结合具体例子推导比较好理解。

2023-11-18 16:57:45 93

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

第九章 动态规划part14

2023-11-17 23:50:18 63

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

dp[i][j]:截止nums1前i个,nums2 前j个存在的最长重复子数组的长度。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。没有想出来,思维定式在状态定义。dp[i]:前i天包含第i天的最长递增子序列的长度。,找到其中最长严格递增子序列的长度。给定一个未经排序的整数数组,找到最长且。第九章 动态规划part13。、长度最长的子数组的长度。,并返回该序列的长度。)确定,如果对于每个。就是连续递增子序列。

2023-11-16 23:48:36 217

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

动态规划状态转移

2023-11-15 23:53:19 234

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

重点掌握动态规划 状态的定义和递推公式推导

2023-11-14 16:33:59 73

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

状态转移。dp[i][1]:第i天不持有股票所得最多现金;dp[i][0]:第i天持有股票所得最多现金;①第i-1天不持有股票且第i天不买入,①第i-1天持有股票且第i天不卖出;②第i-1天不持有股票且第i天买入;②第i-1天持有股票且第i天卖出。

2023-11-12 17:13:08 146

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

本题可以跟贪心法求二叉树安装监控那道题联系,本题是使用了数组记录偷或不偷当前节点情况,安装监控问题是使用了数值记录当前节点覆盖情况。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,还是没能彻底理解前两道题的解法,所以没能想出来,这个问题的核心还是在于是取该节点值还是不取该节点值。你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。

2023-11-09 20:52:50 46

原创 代码随想录算法训练营第四十六天|139. 单词拆分、多重背包问题、总结

代码随想录。

2023-11-08 15:21:45 265

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

思路:完全背包的组合问题,外层遍历物品,内层遍历背包,从小到大遍历实现物品多次放入。是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。思路:将1、2当做物品,使用动态规划解决完全背包的排列问题。如果没有任何一种硬币组合能组成总金额,返回。你有多少种不同的方法可以爬到楼顶呢?,表示不同面额的硬币;你可以认为每种硬币的数量是无限的。计算并返回可以凑成总金额所需的。第九章 动态规划 part07。的完全平方数的最少数量。注意递推公式的推导。

2023-11-06 16:14:52 34

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

第九章 动态规划part06。

2023-11-05 11:16:45 30

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

从而利用动态规划,求出背包总量为所有石头总重量一半时的最大可能重量,再去求差值得到最终结果。这道题看了很久,甚至看了题解一直不能理解,后来发现题意就没读对:应该是子集中所有的字符串的0、1个数总和有限制,求的是最大子集的大小(即子集中最多有多少个字符串)。公式来了, left - (sum - left) = target 推导出 left = (target + sum)/2。left + right = sum,而sum是固定的。target是固定的,sum是固定的,left就可以求出来。

2023-11-03 20:49:40 69

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

第九章 动态规划part04 背包问题。

2023-11-01 17:50:44 42

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

感觉这两道题思路都比较一致,都是将大问题有效分为小问题然后计算,主要是根据题意适当通过画图等推导出递推公式。思路:利用动态规划,利用二叉搜索树左右字数总节点数分配去叠加计算总种数。没想出来,看的题解,主要难点是递推公式的理解和推导。返回满足题意的二叉搜索树的种数。),并使这些整数的乘积最大化。第九章 动态规划 part03。个节点组成且节点值从。你可以获得的最大乘积。

2023-10-31 17:17:27 92

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

解法二:采用数论的方法,从起点到终点总步数为m+n-2,其中向右走的步数为m-1,即问题转化为求m + n - 2个不同的数,随便取m - 1个数,有几种取法(组合问题)。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。2、递推公式:dp[i][j] = dp[i - 1][j] + dp[i][j - 1]网格的左上角 (起始点在下图中标记为 “Start” )。网格的左上角 (起始点在下图中标记为 “Start” )。

2023-10-29 14:38:44 618

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

基本可以上手动态规划了,dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])对动态规划还不熟悉,想不出来,其实跟斐波那契差不多,感觉关键是要找到状态转移方程。个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。F(n) = F(n - 1) + F(n - 2),其中 n > 1。开始,后面的每一项数字都是前面两项数字的和。你有多少种不同的方法可以爬到楼顶呢?请你计算并返回达到楼梯顶部的最低花费。表示)形成的序列称为。

2023-10-28 21:07:06 73

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

第八章 贪心算法part06当且仅当每个相邻位数上的数字x和y满足x <= y时,我们称这个整数是的。给定一个整数n,返回小于或等于n的最大数字,且数字呈。思路:看到题目想了一会还是没什么思路,看了题解从后往前遍历,遇到前一位比当前位大的情况,则减1,后面位数全部设为9给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视计算监控树的所有节点所需的最小摄像头数量。

2023-10-28 15:31:26 44

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

注意第二道字母区间解法,字符串可以采用hash记录字母信息

2023-10-22 21:49:05 25

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

但使用vector是非常费时的,C++中vector(可以理解是一个动态数组,底层是普通数组实现的)如果插入元素大于预先普通数组大小,vector底部会有一个扩容的操作,即申请两倍于原先普通数组的大小,然后把数据拷贝到另一个更大的数组上。思路:首先将气球坐标按xstart从小到大进行排序,然后记录当前覆盖的范围,如果下一个气球起点大于上一个的终点则弓箭数加1,否则取当前范围与当前气球终点之中小者作为新的范围终点。思路:按照hi大的在前,ki小的在前做排序,然后依次插入到ki位置上。

2023-10-21 20:39:56 38

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

正负数分布情况(①全为负数注意最后一个的操作,②全为正数只操作第一个数,③负数个数大于k值全部取反,④负数个数小于k值,考虑最后一个负数与第一个整数绝对值大小,⑤遇到0直接结束)思路:按最基础的做法将前后两数比较后去做增加,出现可以处理升序,不能处理降序情况。思路:想不出来,看了题解。思路:考虑所有可能,直接写,一开始还是很不完善,改了很多次每次都有失败测试用例,情况反复调整最后才ac。,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回。你从其中的一个加油站出发,开始时油箱为空。

2023-10-20 20:29:55 29

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

思路:记录当前可以购买价格,如果价格更低则选择更高的价格,如果价格更高则抛出,获得收益。做到这道题好像可以理解贪心算法的核心:局部最优从而全局最优。思路:一直想着局部最优然后就按着寻找每一步能跳到的最大下标位置然后继续找,一直报错,没有想到将最大坐标作为遍历最大范围去设置就不会缺漏。在每一天,你可以决定是否购买和/或出售股票。数组中的每个元素代表你在该位置可以跳跃的最大长度。贪心算法确实没有什么模板,只能根据实际问题去分析。判断你是否能够到达最后一个下标,如果可以,返回。你也可以先购买,然后在。

2023-10-12 21:46:46 64

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

思路:这道题完全没有思路不知道怎么解起,完全是看题解的,而且也没有思考题解中的两种需要考虑的情况,能理解但是应该记不住。题目思路主要是利用贪心法计算序列中有多少个坡,从而判断每一个节点是否符合条件,注意题解中的平坡情况。不少同学认为 如果输入用例都是-1,或者 都是负数,这个贪心算法跑出来的结果是 0, 这是。假设你是一位很棒的家长,想要给你的孩子们一些小饼干。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

2023-10-12 18:34:49 44

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

看了题解,使用逐层遍历,因为每一行只能有一个皇后,其实应该算是一次剪枝吧。问题就变成在每一行中找到N皇后的位置,通过判断它所在列以及所在斜线是否已经有皇后还找到每一行中的合适位置。思路:与N皇后有相似之处,应该是逐个空格遍历,无法做一个剪枝(自己这么理解)。至于最终的表示结果,使用的是vector<vector<string>>数据结构来存储,感觉也是很巧妙,初始化方法一开始写不出来,需要重点掌握,string的访问方法。回溯函数有返回值,因为题目只有唯一解,找到一个解就可以终止回溯过程。

2023-10-08 20:29:54 62

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

思路:一开始用了前面的做法创建一个哈希表存储同一层用过的元素,大错特错!应该是树的同一分支不能有相同元素,应该把用过的元素放到回溯函数中!如果测试例子是nums=[4,7,6,7]则不能通过,因此发现问题在于应该确保元素在书的同一层前面所有使用过的元素中都不能重复。思路:一开始被两个示例测试用例带偏,只考虑到增加过程中插入元素后者<前者且忽视了相同元素不连续的情况,所以其他测试用例结果错误。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。返回所有不重复的全排列。

2023-09-25 19:59:40 33

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

思路:自己没想清楚回溯的单层循环是什么,终止条件也设置错误,不能以读取到字符结尾作为终止条件,应该是前面设置了是三个断点且第四段有效。思路:比上一题增加了一个判断同一层元素不能相同的条件,一开始忘了怎么写,没有加i>startIndex,导致错误。,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。,用以表示一个 IP 地址,返回所有可能的。返回的解集中,子集可以按。返回该数组所有可能的子集(幂集)。之间组成,且不能含有前导。给定一个只包含数字的字符串。,这些地址可以通过在。

2023-09-24 17:46:14 21

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

自己写的时候是将在满足终止条件时加一个条件即将数组path进行排序后判断存储结果的result二维数组中是否有该数组,没有再添加到结果中,但是得出的结果很奇怪,不知道为什么?可能有的录友想,为什么 used[i - 1] == false 就是同一树层呢,因为同一树层,used[i - 1] == false 才能表示,当前取的 candidates[i] 是从 candidates[i - 1] 回溯而来的。思路:和之前做的组合问题解题思路一致,不一样的点在于同一个数字可以被无限重复选取。

2023-09-23 19:49:18 28

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

思路:该问题主要是要解决数字与字母的映射以及不定个数的for循环遍历。没有想到怎么用回溯去解决这个问题。主要是使用给定字符串索引作为回溯的参数,实现n次循环。总结:回溯算法用于解决组合问题主要是解决n次循环问题,注意设定好索引作为回溯函数的参数。给出数字到字母的映射如下(与电话按键相同)。该列表不能包含相同的组合两次,组合可以以任何顺序返回。思路:按照组合的方法,终止条件增加一个数组和的判断即可。的字符串,返回所有它能表示的字母组合。,当现有路径和超过目标和时就可以停止。所有可能的有效组合的列表。

2023-09-22 12:22:00 25

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

开始学习回溯,主要是回溯基本知识和简单例子。

2023-09-22 09:08:28 49 1

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

思路:大致理解是从右节点->中节点->左节点顺序去遍历,但是写不出代码,没有想到这其实就是反中序遍历,将中序遍历处理顺序做修改即可实现。思路:判断节点值,如果不在范围,小于最小值的取右子节点,大于最大值的取左子节点,使用中序遍历实现对整棵树的遍历。树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点。所以结果应当返回修剪好的二叉搜索树的新的根节点。二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。给你二叉搜索树的根节点。

2023-09-20 21:04:30 44 1

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

思路:找到需要删除的节点之后分四种情况处理(具体见注释),写完之后发现一些测试用例不通过(删除节点为根节点),因为是通过额外节点记录处理节点的父节点,所以如果删除节点为根节点则其没有父节点无法处理,所以增加了一个虚根节点并设置其不为空,可以ac.可以从上到下进行遍历,判断遍历节点值在两个节点值之间即为两个指定节点的最近公共祖先。写完有一个疑惑:这里的parent节点指向的为什么是左右子节点的父节点,而不是像中序遍历中指向前一个节点?对应的节点,并保证二叉搜索树的性质不变。返回插入后二叉搜索树的根节点。

2023-09-17 19:18:38 105 1

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

难点主要在第三题,一刷完全没有思路。后序遍历+回溯!!!!

2023-09-16 21:36:59 49 1

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

想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;思路:使用递归,一开始没有考虑BST特性即左节点值小于中间节点值小于右节点值,没有加节点值条件判断,导致先在左子树判断,不符合则返回空值导致错误。一开始解法错误,只比较中间节点与左右子节点大小关系,忽视下面情况。返回以该节点为根的子树。null 的节点将直接作为新二叉树的节点。合并过程必须从两个树的根节点开始。给你一个二叉树的根节点。

2023-09-15 16:54:22 72

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

第六章二叉树part05给定一个二叉树的root,请找出该二叉树的节点的值。假设二叉树中至少有一个节点。

2023-09-14 20:48:26 52 1

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

二叉树递归求解

2023-09-03 17:09:20 74

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

第六章二叉树part03给定一个二叉树root,返回其最大深度。二叉树的是指从根节点到最远叶子节点的最长路径上的节点数。

2023-09-02 20:30:03 28 1

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

二叉树的层序遍历以及一些二叉树变换(二叉树遍历的变形)

2023-09-02 16:31:33 35 1

空空如也

空空如也

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

TA关注的人

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