代码随想录训练营
文章平均质量分 77
打卡博
小鲨鱼冲冲冲
这个作者很懒,什么都没留下…
展开
-
代码随想录算法训练营day60 | 84.柱状图中最大的矩形
单调栈首先需要考虑栈内是递增还是递减,找左右第一个大于当前的元素用递增,找小于的用递减。第二步是考虑要入栈的元素、栈顶元素三种关系下的处理逻辑。如果要求两侧元素的话还需要考虑栈顶下一个元素,同时需要考虑首尾加0来处理边界问题。原创 2023-06-03 10:29:02 · 508 阅读 · 0 评论 -
代码随想录算法训练营day59 | 503.下一个更大元素II,42. 接雨水
1、环形问题可以用遍历两遍+索引求余的方法处理。2、用单调栈可以一次遍历就找出左右第一个比当前元素高/矮的值。3、单调栈相关题目一定要确定,栈口元素和当前遍历的元素三种大小关系(>,<,=)下的处理方案。原创 2023-06-02 13:59:13 · 250 阅读 · 0 评论 -
代码随想录算法训练营day58 | 739. 每日温度,496.下一个更大元素 I
1、单调栈存放的是数组下标,这样可以更方便的查询元素并获取距离。原创 2023-06-01 23:13:56 · 218 阅读 · 0 评论 -
代码随想录算法训练营day57 | 647. 回文子串,516.最长回文子序列,动态规划总结篇
1、dp数组(dp table)以及下标的含义2、递推公式3、dp数组初始化4、遍历顺序5、举例推导dp数组。原创 2023-05-31 14:38:35 · 246 阅读 · 0 评论 -
代码随想录算法训练营day56 | 583. 两个字符串的删除操作,72. 编辑距离,编辑距离总结篇
动态规划之编辑距离总结篇代码随想录算法训练营day52 | 300.最长递增子序列,674. 最长连续递增序列,718. 最长重复子数组代码随想录算法训练营day53 | 1143.最长公共子序列,1035.不相交的线,53. 最大子序和 动态规划代码随想录算法训练营day55 | 392.判断子序列,115.不同的子序列判断子序列只需要计算删除的情况,不用考虑增加和替换的情况,递推公式为:不同的子序列虽然也只有删除操作,不用考虑替换增加之类的,但可以重复匹配,递推公式变为:} else {原创 2023-05-30 09:57:54 · 223 阅读 · 0 评论 -
代码随想录算法训练营day55 | 392.判断子序列,115.不同的子序列
3、dp数组初始化:当t为空字符串时,s删除全部元素可获得t,因此dp[0][j]初始化为1,其余下标初始化为0.3、dp数组初始化:为简化初始化流程,将dp[i][0]和dp[0][j]都初始化为0,其余下标会被覆盖。4、遍历顺序:当前状态由前一状态推导而来,外层for正序遍历s,内层for正序遍历t。1、dp[i][j]定义:以i-1为结尾的t 在以 j-1为结尾的s 中出现的个数。1、dp[i][j]定义:以i-1结尾的s和以j-1结尾的t的相同子序列长度。原创 2023-05-28 23:59:03 · 228 阅读 · 0 评论 -
代码随想录算法训练营day53 | 1143.最长公共子序列,1035.不相交的线,53. 最大子序和 动态规划
3、dp初始化:dp[0]没有实际意义,为保证递归,初始化为0,其余索引值都会在递归时被覆盖无需考虑。3、dp初始化:dp[i][0]和dp[0][j]没有实际意义,为保证递归,全部初始化为0。3、dp初始化:dp[i][0]和dp[0][j]没有实际意义,为保证递归,全部初始化为0。2、递归公式:dp[i]=nums[i-1]+Math.max(dp[i-1], 0);1、dp[i]含义:以nums[i-1]为结尾的最大连续子数组和。1、dp[i][j]含义:表示以text1从。4、遍历顺序:正向遍历。原创 2023-05-27 10:33:26 · 945 阅读 · 0 评论 -
代码随想录算法训练营day52 | 300.最长递增子序列,674. 最长连续递增序列,718. 最长重复子数组
1、子数组相关题目要从尾部元素去定义dp数组;2、两个不同序列比较时,递推公式需要考虑指针对齐的问题;3、718. 最长重复子数组中dp[i][j]表示索引为i-1和j-1处的最长公共子序列,可以简化初始化状态。原创 2023-05-26 15:00:44 · 914 阅读 · 0 评论 -
代码随想录算法训练营day51 | 309. 最佳买卖股票时机含冷冻期,714.买卖股票的最佳时机含手续费,股票问题总结
121. 买卖股票的最佳时机,122.买卖股票的最佳时机II123.买卖股票的最佳时机III,188.买卖股票的最佳时机IV309. 最佳买卖股票时机含冷冻期,714.买卖股票的最佳时机含手续费121.买卖股票的最佳时机只能买卖一次122.买卖股票的最佳时机II可以买卖多次123.买卖股票的最佳时机III至多可以买卖两次188.买卖股票的最佳时机IV至多可以买卖k次309.最佳买卖股票时机含冷冻期冷冻期不能买卖714.买卖股票的最佳时机含手续费可以买卖多次但每次交易需要支付手续费。原创 2023-05-25 09:55:38 · 424 阅读 · 0 评论 -
代码随想录算法训练营day50 | 123.买卖股票的最佳时机III,188.买卖股票的最佳时机IV
确定第i天有几个状态即可。这基础上可以空间优化,仅维护前一天的状态即可。原创 2023-05-24 12:09:14 · 433 阅读 · 0 评论 -
代码随想录算法训练营day49 | 121. 买卖股票的最佳时机,122.买卖股票的最佳时机II
3、初始化dp:dp[0][0]=0;原创 2023-05-23 09:35:05 · 506 阅读 · 0 评论 -
代码随想录算法训练营day48 | 198.打家劫舍,213.打家劫舍II,337.打家劫舍III
对于环的问题,可以通过掐头,去尾转化成两个线性问题来解决。树形dp要想清楚dp[i]需要想清楚保留什么状态,以及递归逻辑。原创 2023-05-22 14:57:37 · 505 阅读 · 0 评论 -
代码随想录算法训练营day46 | 139.单词拆分 ,多重背包,背包问题总结篇!
教程视频:https://www.bilibili.com/video/BV1pd4y147Rh思路:1、dp[j]含义:是否可以拼接出至字符串的 i 个字符(本可以使用boolean数组,这里使用int数组0表示不可以,1表示可以)2、递推公式:3、dp数组初始化:为满足递推需要dp[0]=1;其余下标在迭代过程中会被判断,初始化为04、遍历顺序:每个单词可以使用多次,且输出结果与单词顺序有关,完全背包问题求排列。外层for循环正向遍历背包容量,内层for循环遍历物品。5、打印验证:解法二原创 2023-05-20 23:24:41 · 444 阅读 · 0 评论 -
代码随想录算法训练营day45 | 70. 爬楼梯 (进阶),322. 零钱兑换,279.完全平方数
4、遍历顺序:求的是完全背包的结果长度,组合和排列都可以,这里采用组合的求法。4、遍历顺序:求的是完全背包的结果长度,组合和排列都可以,这里采用组合的求法。:这是一个完全背包问题,其中 n 为背包容量,完全平方数为物品重量,求的是最少完全平方数的数量。2、递推公式:dp[j]=Math.min(dp[j],dp[j-coins[i]]+1);2、递推公式:dp[j]=Math.min(dp[j],dp[j-m[i]]+1);1、dp[j]定义:背包容量为 j 时使用的最少完全平方数的数量。原创 2023-05-19 10:02:45 · 449 阅读 · 0 评论 -
代码随想录算法训练营day44 | 完全背包,518. 零钱兑换 II,377. 组合总和 Ⅳ
有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。完全背包和01背包问题唯一不同的地方就是,每种物品有无限件。完全背包问题遍历顺序很重要:如果求组合数就是外层for循环遍历物品,内层for遍历背包。如果求排列数就是外层for遍历背包,内层for循环遍历物品。原创 2023-05-18 10:59:07 · 658 阅读 · 0 评论 -
代码随想录算法训练营day43 | 1049. 最后一块石头的重量 II ,494. 目标和,474.一和零,01背包问题总结
思路:尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,这样就将本题化解成01背包问题了。此时背包容量是sum/2,物品重量和价值都等于数组中的每个数字。此时我们讲解了0-1背包的多种应用,纯 0 - 1 背包是求 给定背包容量 装满背包 的最大价值是多少。输出dp[dp.length-1];416.分割等和子集是求 给定背包容量,能不能装满这个背包。输出dp[sum/2] == sum/2;1049.最后一块石头的重量 II是求 给定背包容量,尽可能装,最多能装多少。原创 2023-05-17 15:02:19 · 525 阅读 · 0 评论 -
代码随想录算法训练营day42 | 01背包问题,你该了解这些!,01背包问题,你该了解这些! 滚动数组 , 416. 分割等和子集
重点掌握01 背包和完全背包即可。原创 2023-05-16 15:22:04 · 575 阅读 · 0 评论 -
代码随想录算法训练营day41 | 343. 整数拆分,96.不同的二叉搜索树
上述两题的递推公式都是需要使用for循环来确定的。需要想清楚for循环的范围进行合理剪枝。原创 2023-05-15 09:51:39 · 402 阅读 · 0 评论 -
代码随想录算法训练营day39 | 62.不同路径,63. 不同路径 II
2、递推公式:dp[i][j]=dp[i-1][j]+dp[i][j-1],(i,j)处遇到障碍则设置dp[i][j]为0。4、遍历顺序,dp[i][j]由dp[i-1][j]和dp[i][j-1]确定,因此行和列都需要正向遍历。4、遍历顺序,dp[i][j]由dp[i-1][j]和dp[i][j-1]确定,因此行和列都需要正向遍历。3、dp矩阵初始化,dp[i][0]=1 dp[0][i]=1 初始化横竖就可。2、递推公式:dp[i][j]=dp[i-1][j]+dp[i][j-1];原创 2023-05-13 23:51:53 · 419 阅读 · 0 评论 -
代码随想录算法训练营day38 | 动态规划理论基础,509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯
掌握动态规划五步很重要,尤其是dp[i]含义和状态转移方程。原创 2023-05-12 15:44:19 · 211 阅读 · 0 评论 -
代码随想录算法训练营day15 | 层序遍历 10,226.翻转二叉树,101.对称二叉树 2
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。原创 2023-04-19 23:44:13 · 337 阅读 · 1 评论 -
代码随想录算法训练营day08 | 344.反转字符串,541. 反转字符串II,剑指Offer 05.替换空格,151.翻转字符串里的单词,剑指Offer58-II.左旋转字符串
1、java字符串不可变,若向使用指针,需要先使用toCharArray()方法转换成字符数组chart[]。2、寻找特定字符的索引可使用StringBuilder(高效线程不安全)或者StringBuffer(线程安全)。3、截取子字符串可使用String类的substring()方法(注意方法名全小写),此操作时间复杂度为O(n)。原创 2023-04-12 22:10:33 · 63 阅读 · 0 评论 -
代码随想录算法训练营day07 | 454.四数相加II , 383. 赎金信, 15. 三数之和 , 18. 四数之和
拆分数据时,平均分配有助于减少时间复杂度。要求结果不重复往往要先进行排序,然后使用指针遍历。去重细节较多,需注意。【三数之和】和【四数之和】细节较多,需要多练几遍。原创 2023-04-11 15:48:09 · 185 阅读 · 0 评论 -
代码随想录算法训练营day10 | 232.用栈实现队列, 225. 用队列实现栈
Stack基础操作操作方法压入元素push(x)弹出元素pop()查看顶部元素peek()判断是否为空Queue基础操作操作方法压入元素offer(x)弹出元素poll()查看顶部元素peek()判断是否为空isEmpty()Deque基础操作操作方法操作方法头部压入元素尾部压入元素头部弹出元素尾部弹出元素pollLast()查看 头部元素查看尾部元素peekLast()判断是否为空isEmpty()原创 2023-04-14 21:11:25 · 65 阅读 · 0 评论 -
代码随想录算法训练营day06 | 242. 有效的字母异位词, 349. 两个数组的交集, 202. 快乐数, 1. 两数之和
1.当需要快速寻找之前遍历过的内容,使用哈希结构.2.数组适用于有限内容的查找;HashSet适用于去重复查找;HashMap适合带键值对的查找.3.使用HashSet和HashMap时记得指定泛型, 否则得到的集合内元素是Object.原创 2023-04-10 16:45:57 · 107 阅读 · 0 评论 -
代码随想录算法训练营day03 | 203.移除链表元素,707.设计链表,206.反转链表
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。原创 2023-04-08 00:50:35 · 152 阅读 · 1 评论 -
代码随想录算法训练营day04 | 24. 两两交换链表中的节点 , 19.删除链表的倒数第N个节点 ,面试题 02.07. 链表相交 ,142.环形链表II
1.使用虚拟头节点时,返回节点使用虚拟头节点表示,而不使用题干给出的head表示;2.与链表倒数n元素相关的题可用快慢指针处理;3.相交元素要抓住相交后链表长度一致;4.环形链表不能遍历,需要用快慢指针来确定环存在以及寻找环入口.原创 2023-04-10 12:45:48 · 83 阅读 · 0 评论 -
代码随想录算法训练营day11 | 20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值
1、遇到折叠相关问题考虑使用栈结构。原创 2023-04-15 22:00:21 · 72 阅读 · 0 评论 -
代码随想录算法训练营day27 | 39. 组合总和,40.组合总和II,131.分割回文串
1、在求和问题中,排序之后加剪枝是常见的套路!2、组合总和II需要理清“树层去重”和“树枝去重”两个维度。3、切割问题可以抽象为组合问题,用回溯法解决。关键在于用startIndex模拟分割线,确定递归终止条件。原创 2023-05-05 13:32:12 · 113 阅读 · 0 评论 -
代码随想录算法训练营day37 | 738.单调递增的数字,968.监控二叉树
考虑叶子节点数量远大于根结点数量,省下的摄像头数量更多i,因此采用思路2。从后向前遍历,一旦前一个数大于后一个数(非递增情况),将前一位数减一,后一位及其之后的数全都变成9。大体思路就是从低到上,先给叶子节点父节点放个摄像头,然后隔两个节点放一个摄像头,直至到二叉树头结点。:为了保证叶子节点上层节点安装摄像头,空节点应该向上层返回状态2(本节点有覆盖)。:(注意0和2状态之和即为无摄像头状态,不需要在额外设置无摄像头状态)让叶子节点的父节点安摄像头,所用摄像头最少。2:本节点有覆盖(无摄像头)原创 2023-05-11 10:35:37 · 292 阅读 · 3 评论 -
代码随想录算法训练营day36 | 435. 无重叠区间,763.划分字母区间,56. 合并区间
关于区间重合的题目,首先要进行排序,相邻区间尽可能的重叠;然后判断是寻找重合区间还是非重合区间,确定处理逻辑;最后编写程序还要注意边界的界定。原创 2023-05-10 16:32:28 · 613 阅读 · 0 评论 -
代码随想录算法训练营day35 | 860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球
为了让气球尽可能的重叠,需要对数组进行排序。下面题解是使用气球起始位置排序实现的,也可以使用终止位置排序,只是遍历顺序需要调整。【注意】这里排序时可能会溢出,需要使用Integer内置比较方法Integer.comare(a,b),身高一定是从大到小排(身高相同的话则k小的站前面),让高个子在前面。优先按身高高的people的k来插入。插入操作过后的people满足队列属性。局部最优:当气球出现重叠,一起射,所用弓箭最少。最后都做完插入操作,整个队列满足题目队列属性。全局最优:把所有气球射爆所用弓箭最少。原创 2023-05-10 14:11:22 · 804 阅读 · 0 评论 -
代码随想录算法训练营day34 | 1005.K次取反后最大化的数组和 ,134. 加油站,135. 分发糖果
1、比前一个数大,即ratings[i]>ratings[i-1],此时小的在左边,这种情况从前向后遍历。2、比后一个数大,即ratings[i]>ratings[i+1],此时小的在右边,这种情况从后向前遍历。到第 i 天累加剩余油量curSum一旦小于0,起始位置至少要是i+1,因为从i之前开始一定不行。第一次取绝对值最大负数,第二次去绝对值最小非负数。【注意】想清楚局部最优解,不要陷入数组循环的误区。利用了java8的新特性:stream。(按照题意,等于的情况和小于一样处理)原创 2023-05-08 15:20:14 · 189 阅读 · 0 评论 -
代码随想录算法训练营day32 | 贪心算法:122.买卖股票的最佳时机II ,55. 跳跃游戏,45.跳跃游戏II
例如示例1中:初始位置数字是2,最远位置更新为索引2,可以跳到值为3和1;先看3,此时更新最远位置为4等于数组长度,循环结束。这道题目关键点在于:不用拘泥于每次究竟跳几步,而是不断寻找当前覆盖范围,覆盖范围内一定是可以跳过来的,不用管是怎么跳的。贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点。记录最大覆盖范围的更新次数。用最少的步数增大覆盖范围。原创 2023-05-07 14:20:37 · 260 阅读 · 0 评论 -
代码随想录算法训练营day31 | 贪心算法:455.分发饼干,376. 摆动序列,53. 最大子序和
局部最优:当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。全局最优:选取最大“连续和”原创 2023-05-07 09:52:45 · 149 阅读 · 0 评论 -
代码随想录算法训练营day30 | 332. 重新安排行程,51. N 皇后,37. 解数独
本节都是难度较高的回溯题,只要准确分辨控制树的深度和宽度的因素即可正确解题。原创 2023-05-06 14:58:17 · 476 阅读 · 0 评论 -
代码随想录算法训练营day29 | 491.递增子序列,46.全排列,47.全排列 II
1、不能排序时,需要采用Map进行树层去重。同时,求子集可以省略终止条件。a、每层都是从0开始搜索而不是startIndex;b、需要记录path里都放了哪些元素了。3、47.全排列 II是46.全排列和40.组合总和II的结合。树枝不去重,树层去重。原创 2023-05-06 10:37:04 · 596 阅读 · 0 评论 -
代码随想录算法训练营day28 | 93.复原IP地址,78.子集,90.子集II
子集问题需要在每个节点收集数据,因此result新增元素操作要放在backtracking函数开头.原创 2023-05-05 19:46:33 · 405 阅读 · 0 评论 -
代码随想录算法训练营day25 | 216.组合总和III,17.电话号码的字母组合
216.组合总和III:和组合类似的,只是添加了一个sum参数,看目前的累积和是多少,一样经典的递归三部曲17.电话号码的字母组合:这题其实就是每个数字对应的字母集合不同了,和之前回溯题目的差别就在于其for循环可供的选择不同了,看清楚这点就和其他的类似。原创 2023-05-04 14:09:58 · 52 阅读 · 0 评论 -
代码随想录算法训练营day24 | 回溯理论基础,77. 组合
回溯法也可以叫做回溯搜索法,它是一种搜索的方式。原创 2023-05-04 10:09:29 · 154 阅读 · 0 评论