![](https://img-blog.csdnimg.cn/direct/9ffc7ff579af4276a23ff066f4aaeb2c.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
代码随想录-36期
文章平均质量分 59
第36期代码随想录算法,一刷
yht724
这个作者很懒,什么都没留下…
展开
-
Day63 单调栈part02
LC42接雨水(未掌握)暴力解法:按列求雨水体积宽度一定是1高度,取决于,该列 左侧最高的柱子和右侧最高的柱子中最矮的那个柱子的高度。代码双指针优化法:每到一个柱子都向两边遍历一遍,这其实是有重复计算的。我们把每一个位置的左边最高高度记录在一个数组上(maxLeft),右边最高高度记录在一个数组上(maxRight),这样就避免了重复计算代码单调栈需要寻找一个元素,右边最大元素以及左边最大元素,来计算雨水面积单调栈从栈头到栈底的顺序是从小到大的一旦发现添加原创 2024-07-11 23:34:55 · 710 阅读 · 0 评论 -
Day62 单调栈part01
LC739每日温度(未掌握)暴力解法:两层for循环,时间复杂度O(n^2),会超时未掌握原因分析:只想到了从栈顶到栈底是递减的情况,忽略了从栈顶到栈底是递增的情况因为需要找到一个元素右边第一个更大元素,只有递增的时候,栈里要加入一个元素i的时候,才知道栈顶元素在数组中右面第一个比栈顶元素大的元素是i下标i和栈顶元素下标是我们已知的信息,我们需要的也是下标,只有充分利用我们已知的信息才能减轻负担代码LC496下一个更大元素I(未掌握)本质是跟LC739一样的,但是因为涉及两个数原创 2024-07-09 23:13:57 · 322 阅读 · 0 评论 -
Day60 动态规划part13
LC647回文子串(未掌握)暴力:两层for循环,遍历区间起始位置和终止位置,然后还需要一层遍历判断这个区间是不是回文。所以时间复杂度:O(n^3)dp数组含义常规dp数组:题目求什么,我们就如何定义dp数组。但是此题这样定义很难找到对应的递归关系根据回文性质来定义dp数组:判断一个子字符串(字符串的下表范围[i,j])是否回文,依赖于,子字符串(下表范围[i + 1, j - 1])) 是否是回文dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串递原创 2024-07-08 23:48:59 · 222 阅读 · 0 评论 -
优化后Day53 动态规划part11
1.dp数组的含义:dp[i][j]表示以下标i结尾的text1子序列和以下标j结尾的text2子序列的最长公共子序列2. 初始化:跟LC718一样,i结尾的需要初始化,i-1结尾不需要初始化3. 递推公式。原创 2024-07-07 18:15:11 · 201 阅读 · 0 评论 -
优化:Day52 动态规划part10
LC300最长递增子序列dp数组中dp[i]的含义是:以nums[i]结尾的子序列中最长递增子序列的长度为dp[i]最长连续递增子序列非连续最长递增子序列如果是连续的,只需要nums[i]>nums[i-1]就将dp值+1,但是如果是非连续的,nums[i]之前的所有子序列都可能跟nums[i]组成递增子序列,因此需要多加一层循环LC674最长连续递增子序列LC718最长重复子数组(未掌握)未掌握分析:想复杂了dp数组的含义:dp[i][j]表示nums1中以nums1[i原创 2024-06-17 23:44:47 · 247 阅读 · 0 评论 -
Day53 动态规划part12
LC309买卖股票的最佳时机含冷冻期与LC122类似,都是可无限次购买股票,只不过引入了冷冻期的概念dp[i][0] 第i天持有股票收益;dp[i][1] 第i天不持有股票收益;情况一:第i天是冷静期,不能以dp[i-1][1]购买股票,所以以dp[i - 2][1]买股票,没问题情况二:第i天不是冷静期,理论上应该以dp[i-1][1]购买股票,但是第i天不是冷静期说明,第i-1天没有卖出股票,则dp[i-1][1]=dp[i-2][1],所以可以用dp[i-2][1]买股票,没问题代码原创 2024-06-08 19:22:40 · 375 阅读 · 0 评论 -
Day51 动态规划part10+Day52 动态规划part11
k+1种,代表2。原创 2024-06-08 17:07:36 · 808 阅读 · 0 评论 -
Day50 动态规划part09
LC198打家劫舍偷前一家或者偷前两家和这家:dp[i] = Math.max(dp[i-2]+nums[i],dp[i-1]);代码LC213打家劫舍II( 未掌握)解题思路:因为成环了,所以首位元素一定是两者只能选择一个或者两者都不选三种情况:首尾元素都不选择,即数组范围为[1,nums.length-2]选择首元素不选择尾元素,即数组范围为[0,nums.length-2]选择尾元素不选择首元素,即数组范围为[1,nums.length-1]以上三种情况都可以看成是单独原创 2024-06-08 14:15:02 · 184 阅读 · 0 评论 -
Day49 动态规划part08
LC139单词拆分(未掌握)未掌握分析:将字符串s中的各个字符看成是背包,思考成了多重背包问题单词就是物品,字符串s就是背包,单词能否组成字符串s,就是问物品能不能把背包装满。拆分时可以重复使用字典中的单词,说明就是一个完全背包!只不过与一般的完全背包不同的是需要考虑物品的顺序问题,物品并不能随意摆放在背包中dp数组的含义:dp[i] : 字符串长度为i的话,dp[i]为true,表示可以拆分为一个或多个在字典中出现的单词确定递推公式:如果确定dp[j] 是true,且 [j, i] 这个区间的子原创 2024-06-07 23:02:59 · 320 阅读 · 0 评论 -
Day48 动态规划part07
爬楼梯进阶版(未掌握)没有搞清楚完全背包的排列和组合的区别题目问的是有多少组不同的方法爬上楼顶,{2,1}和{1,2}是不同的方法,因此属于排列问题,所以应该先背包后物品根据题意可知,将需要n阶爬上楼顶理解为背包容量最大为n,每次你可以爬至多m 个台阶理解为一共有m个物品,每个物品的重量是m,且每个物品没有使用次数限制。题目变成完全背包问题,即装满容量为n的背包一共有多少种方法代码:LC322零钱兑换本题求钱币最小个数,那么钱币有顺序和没有顺序都可以,都不影响钱币的最小个数。所以本题并不强原创 2024-06-06 23:15:34 · 239 阅读 · 0 评论 -
Day46 动态规划part06
完全背包问题完全背包和01背包问题唯一不同的地方就是,每种物品有无限件。先遍历物品还是先遍历背包以及遍历顺序根据递推公式可知:每一个dp需要根据上方和左方的数据推出,只要保证数据左上方数据是递推出来的这种两个for循环的顺序就是可以的01背包:01背包二维dp数组:两个for遍历的先后循序是可以颠倒行是背包容量,列是物品,从小到大遍历物品和背包先物品再背包:一行一行进行遍历,左上元素是递推出来的(有一行是初始化)先背包再物品:一列一列进行遍历,左上元素是递推出来的01背包一维d原创 2024-06-02 14:06:12 · 263 阅读 · 0 评论 -
Day45 动态规划part05
LC1049最后一块石头重量II(未掌握)未掌握分析:其实本题跟LC416分割等和子集类似,本质上题目的要求是尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,也就是01背包问题weight和value都是stones数组,题目可以看成是target=sum/2,即求背包容量是target所装石头的value是多少。target = sum / 2 因为是向下取整,所以sum - dp[target] 一定是大于等于dp[target]的。代码LC494目标和(未掌握)未能够将题意转原创 2024-06-01 22:15:02 · 446 阅读 · 0 评论 -
Day44 动态规划part04
o2n。原创 2024-06-01 21:02:09 · 963 阅读 · 0 评论 -
动态规划part03 Day43
dp[i-j],j。原创 2024-05-29 22:51:11 · 789 阅读 · 0 评论 -
动态规划part02 Day42
LC62不同路径LC63不同路径II(超时10min)超时原因分析:思路想错了,即便是正确思路初始化也有点问题,应该将不必要的判断逻辑引入初始化的过程中初始化:从左上角到[i][0]和[0][j]都只有一条路径dp[i][0]=1和dp[0][j]=1引入故障,因此还需要obstacleGrid[i][0]==0和obstacleGrid[0][j]==0循环过程中,如果存在左边或者上边有故障,那么他们的dp值一定是0的,因为判断obstacles[i][j]==1直接continue原创 2024-05-28 18:00:00 · 231 阅读 · 0 评论 -
动态规划part01 Day41
动态规划算法解题步骤确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组LC509斐波那契数LC70爬楼梯LC746使用最小花费爬楼梯dp[]含义:爬到第i层楼梯的最小花费原创 2024-05-28 16:57:18 · 194 阅读 · 0 评论 -
Day39贪心算法part06
LC738单调递增的数字(未掌握)思路分析:一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]–,然后strNum[i]给为9字符串是不可变的,不可以使用s.charAt(i)='9’来改变字符串某个位置的值String[]数组转换为String不可以直接使用String.valueOf(),会将数组的地址转换成String其他类型转换为字符串可以使用+“”。 String[]数组转换为String使用String.join(原创 2024-05-25 23:27:29 · 203 阅读 · 0 评论 -
Day38 贪心算法part05
LC435无重叠区间(未掌握)思路:先对数组进行排序,找到非重叠的区间的个数,然后区间的总数减去非重叠区间的个数即是需要移除的区间的个数与LC452用最少数量的箭引爆气球类似,但是不同的是[1,2]和[2,3]在此题并不是重叠区间但是在LC452是重叠区间LC452是有多少个非重叠区间就需要使用多少个箭代码LC763划分字母区间(未掌握)思路:遍历的过程中相当于是要找每一个字母的边界,如果找到之前遍历过的所有字母的最远边界,说明这个边界就是分割点了。统计每一个字符最后出现的位置原创 2024-05-24 22:07:53 · 390 阅读 · 0 评论 -
Day37 贪心算法part04
LC860柠檬水找零(未掌握)未掌握分析:20的时候找零卡住,同时贪心思路就想了很久当bill[i]=20的时候,我们有两种找零范式,找零10、5和找零三个5,优先找零10、5,因为三个5是可以替代10、5的情况的,我们需要留着三个5防备其他情况。代码LC406根据身高重建队列(未掌握)两个维度的题目,与LC135分糖果一样,一定要先确定一个维度,再确定另一个维度。如果两个维度一起考虑一定会顾此失彼。如果是先按照K从小到大排序,可以发现K维度和h维度哪个都没有确定下来,与思想违背,原创 2024-05-23 22:22:30 · 419 阅读 · 0 评论 -
Day36 贪心算法Part03
LC1005 K次取反后最大化的数组和(未掌握)未掌握分析:贪心思维不够贪心思路:局部最优:让绝对值大的负数变为正数,当前数值达到最大,整体最优:整个数组和达到最大。如果将负数都转变为正数了,K依然大于0,此时的问题是一个有序正整数序列,如何转变K次正负,让 数组和 达到最大。局部最优:只找数值最小的正整数进行反转,当前数值和可以达到最大,全局最优:整个 数组和 达到最大。代码.LC134加油站(未掌握)暴力方法:遍历每一个加油站为起点的情况,模拟一圈因为涉及循环一原创 2024-05-22 22:37:06 · 450 阅读 · 0 评论 -
Day35
贪心算法part02。原创 2024-05-21 22:39:56 · 233 阅读 · 0 评论 -
Day34
贪心算法part01。原创 2024-05-20 20:30:10 · 315 阅读 · 0 评论 -
Day32
回溯算法part06。原创 2024-05-18 22:32:21 · 310 阅读 · 0 评论 -
Day31
回溯算法part05。原创 2024-05-17 22:27:23 · 298 阅读 · 0 评论 -
Day30
回溯算法part04。原创 2024-05-16 22:11:37 · 227 阅读 · 0 评论 -
Day29
回溯算法part03。原创 2024-05-15 20:59:35 · 215 阅读 · 0 评论 -
Day28
回溯算法part02。原创 2024-05-14 20:54:35 · 256 阅读 · 0 评论 -
Day27
回溯算法part01。原创 2024-05-13 20:31:48 · 220 阅读 · 0 评论 -
Day25
二叉树part09。原创 2024-05-11 17:30:11 · 211 阅读 · 0 评论 -
Day24
二叉树part08。原创 2024-05-10 16:07:16 · 275 阅读 · 0 评论 -
Day23
二叉树part07。原创 2024-05-09 20:13:41 · 337 阅读 · 0 评论 -
Day22
二叉树part06。原创 2024-05-08 22:30:31 · 382 阅读 · 0 评论 -
Day21
二叉树part05。原创 2024-05-07 21:06:59 · 389 阅读 · 1 评论 -
Day20
二叉树part04。原创 2024-05-06 22:10:05 · 374 阅读 · 1 评论 -
Day19
二叉树part03。原创 2024-05-05 21:10:59 · 159 阅读 · 0 评论 -
Day18
二叉树 part02。原创 2024-05-04 23:45:50 · 193 阅读 · 1 评论 -
Day14
二叉树part01。原创 2024-04-30 22:48:47 · 263 阅读 · 1 评论 -
Day13
面试题:栈里面的元素在内存中是连续分布的吗栈是容器适配器,底层容器使用不同的容器,导致栈内数据在内存中不一定是连续分布的。栈,队列不归类为容器,往往被归类为容器适配器。栈的底层实现可以是 vector,deque,list 都可以,主要就是数组和链表的底层实现。缺省情况下,默认底层容器是deque,deque在内存中的数据分布是不连续的经典未掌握题目用队列实现栈:一个栈用来存放元素,一个元素用来备份元素。原创 2024-04-29 22:13:52 · 78 阅读 · 0 评论 -
Day11
第十一天 栈与队列part02。原创 2024-04-27 14:48:34 · 252 阅读 · 1 评论 -
Day10
第十天 栈与队列 part01。原创 2024-04-26 22:36:52 · 133 阅读 · 1 评论