- 博客(46)
- 收藏
- 关注
原创 代码随想录算法训练营第五十九天 | 图 | 多源最短路
自己实现中遇到哪些困难今日收获,记录一下自己的学习时间直接用三维数组来讲,目的是将遍历顺序这里讲清楚。理解了遍历顺序才是floyd算法最精髓的地方。floyd算法的时间复杂度相对较高,适合 稠密图且源点较多的情况如果 源点少,其实可以 多次dijsktra 求源点到终点。
2024-12-27 17:38:29
150
原创 代码随想录算法训练营第四十六天 | 单调栈
自己实现中遇到哪些困难在一维数组中找第一个满足某种条件的数”的场景就是典型的单调栈应用场景今日收获,记录一下自己的学习时间。
2024-12-15 19:21:09
1046
原创 代码随想录算法训练营第四十五天 | 647. 回文子串 | 516.最长回文子序列
自己实现中遇到哪些困难今日收获,记录一下自己的学习时间确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组题目类别01背包 (物品, 背包逆序)完全背包 (先物品 = 组合, 先背包 = 排列(不同的组合)子集分割 (可以转换成01背包)正常动态规划, 累计之前的计算结果打家劫舍 (状态叠加)股票系列 (多种状态间的转移)子序列 (二维dp数组, 保存暴力搜索的结果)
2024-12-13 19:24:48
812
原创 代码随想录算法训练营第四十四天 | 583. 两个字符串的删除操作 | 72. 编辑距离
自己实现中遇到哪些困难今日收获,记录一下自己的学习时间编辑距离总结篇做一个总结吧代码随想录1035.不相交的线: 最长公共子序列找二维dp数组里的 最大公共子序列长度, 2个选最大else53. 最大子序和:子数组的最大和可以贪心, dp就是记录每一位的累计的和取最大值392.判断子序列字符串s, 是否出现在字符串t中,判断他们子序列如果S出现在T中, 说明他们有交叉的公共子序列, 该子序列就是S。
2024-12-13 01:59:30
748
原创 代码随想录算法训练营第四十三天 | 找公共的子序列 | 392.判断子序列(编辑距离)| 115.不同的子序列(困难)
自己实现中遇到哪些困难1035.不相交的线: 最长公共子序列53. 最大子序和:子数组的最大和392.判断子序列字符串s, 是否出现在字符串t中,判断他们子序列怎么想到的去找两个字符串中的公共子序列。115.不同的子序列s 的子序列, 满足 t 的个数。今日收获,记录一下自己的学习时间。
2024-12-11 22:16:44
764
原创 代码随想录算法训练营第四十一天 | 300.最长递增子序列 | 718. 最长重复子数组 | 1143.最长公共子序列
自己实现中遇到哪些困难二维dp数组计算所有的区间的结果, 本质离不开暴力, 只不过保存了前面的计算结果.今日收获,记录一下自己的学习时间714.买卖股票的最佳时机含手续费714. 买卖股票的最佳时机含手续费 - 力扣(LeetCode)
2024-12-09 16:06:39
893
原创 代码随想录算法训练营第三十九天 | 122.买卖股票的最佳时机II | 123.买卖股票的最佳时机III | 188.买卖股票的最佳时机IV | 309.最佳买卖股票时机含冷冻期
买卖股票之一次买卖:贪心: 左边最小值, 右边最大值, 得到最大差值dp: 今天持有股票, 今天未持有股票(不能卖了再买)买卖股票之多次买卖:dp: 今天持有股票, 今天未持有股票(买了再卖)买卖股票之k次买卖:dp: 第k次买入, 第k次卖出买卖之冷冻期:dp: 冷冻期如何表示, 可以以具体状态表示, 可以隐含的表示(昨天卖了今天就是冷冻期)
2024-12-07 13:40:53
615
原创 代码随想录算法训练营第三十八天 | 198.打家劫舍 | 213.打家劫舍II | 337.打家劫舍 III (树形dp) | 121. 买卖股票的最佳时机
自己实现中遇到哪些困难如果求组合数就是外层for循环遍历先物品,内层for遍历背包。如果求排列数就是外层for遍历先背包,内层for循环遍历物品。今日收获,记录一下自己的学习时间打家劫舍: 正常dp打家劫舍Ⅱ: 环形, 分两种情况处理打家劫舍Ⅲ: 树形dp. 通过递归更新dp数组买卖股票: dp数组保存不同的情况下的最大收益。
2024-12-06 18:46:15
842
原创 代码随想录算法训练营第三十七天 | 377. 组合总和 Ⅳ | 377. 组合总和 Ⅳ | 322. 零钱兑换 | 279.完全平方数 | 138.单词拆分
自己实现中遇到哪些困难如果求组合数就是外层for循环遍历先物品,内层for遍历背包。如果求排列数就是外层for遍历先背包,内层for循环遍历物品。今日收获,记录一下自己的学习时间组合总和 Ⅳ: 求组合先物品, 求排列先背包爬楼梯 (进阶): 确定物品是什么, 物品重量是什么. 物品价值是什么, 背包容量是什么求方法数量:零钱兑换: 求组合的最小长度, dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1);
2024-12-05 21:01:57
700
原创 代码随想录算法训练营第三十六天 | 494. 目标和 | 474.一和零 完全背包理论基础 | 518. 零钱兑换 II
自己实现中遇到哪些困难今日收获,记录一下自己的学习时间目标和:拆分成两个子集,计算填满一个子集的组合数量。dp数组保存是否使用该元素的组合总数量分别是多少。一个元素使用一次,右到左遍历dp[0] 初始化为1一和零:背包有两个维度,物品对两个维度都有影响,计算最多物品数量(并非价值)递推公式:dp[i][j] = max(dp[i][j], dp[i - zeroNum][j - oneNum] + 1);初始化:全是0即可。先遍历物品,再遍历背包,一个物品遍历一次。
2024-12-04 16:24:30
746
原创 代码随想录算法训练营第三十五天 | 01背包问题(二维,一维) | 416. 分割等和子集 | 1049.最后一块石头的重量II
自己实现中遇到哪些困难背包问题:针对容量 j 是否应该放置物品 i (取决于容量和最大价值)今日收获,记录一下自己的学习时间01背包问题:依次放入物品到背包当中,记录不同容量情况下的最大价值。二维dp数组,一维dp数组(从右向左遍历,因为依赖上一层的左值)分割等和子集:背包容量为 target,元素的价值和重量等于元素值最后一个石头重量:与分割等和子集相同,尽力分成两个等和子集。代码随想录动态规划之背包问题,这个包能装满吗?
2024-12-03 10:23:04
714
原创 代码随想录算法训练营第三十四天 | 62.不同路径 | 63. 不同路径 II | 343.整数拆分 | 96.不同的二叉搜索树
自己实现中遇到哪些困难动态规划初始化逻辑:初始化哪些依赖并不存在的格子如何解决当前问题?通过分解成1个,2个或者多个子问题如何解决子问题?再继续分解,直到要解决一个根部问题,通过根部问题计算上一级子问题的答案,再去回答上上级子问题的答案。根部问题就是动态规划的初始化子问题的升级就是动态规划的推导公式发现解决问题嵌套着相同的子问题,想到使用动态规划今日收获,记录一下自己的学习时间动态规划求路径:路径的依赖,障碍对初始化的影响。
2024-12-02 15:12:35
1298
原创 力扣难题解析
在目标串s,中维护一个滑动窗口,并记录目标字符的数量,通过检测目标字符数与hashmap是否一致,判断当前窗口是否是有效窗口。窗口的扩展:窗口向右扩展,收录一个字符。如果是目标字符,加入当前记录,并判断是否符合窗口收缩要求。窗口的收缩:1.当前窗口符合找到所有字符之后,并开始从左侧收缩,直到遇见了第一个不能舍去的有效字符。最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。使用HashMap记录模板串t,中的字母分布数量。所有字符的子串,则返回空字符串。所有字符的最小子串。
2024-11-30 16:40:24
335
原创 代码随想录算法训练营第三十二天 | 509. 斐波那契数 | 70. 爬楼梯 | 746. 使用最小花费爬楼梯
自己实现中遇到哪些困难今日收获,记录一下自己的学习时间理论基础代码随想录动态规划问题有很多的重叠子问题需要解决,状态涉及推导DP 5部曲DP数组含义状态转移公式dp数组初始化数组遍历顺序举例推导从此再也不怕动态规划了,动态规划解题方法论大曝光!| 理论基础 |力扣刷题总结| 动态规划入门_哔哩哔哩_bilibili509. 斐波那契数代码随想录手把手带你入门动态规划 | LeetCode:509.斐波那契数_哔哩哔哩_bilibili。
2024-11-30 13:00:26
608
原创 代码随想录算法训练营第三十一天 | 贪心总结 | 738.单调递增的数字 | 968.监控二叉树
自己实现中遇到哪些困难用自己的方式理解了放摄像头的思路如何放置最少 = 如何减去最多这种从另一个角度看问题的思维,我觉得对贪心来说有必要之前的关于合并区间的题也是如此今日收获,记录一下自己的学习时间贪心总结代码随想录果找出局部最优并可以推出全局最优,并且找不出反例,就试试贪心贪心简单题:靠常识进行推断贪心中等题:需要思考什么是局部最优,什么是全局最优,是否存在反例两个维度权衡问题:需要先确定一个维度,再确定另一个维度,不能顾此失彼贪心解决区间问题:区间的覆盖,区间的去重。
2024-11-29 22:21:35
535
原创 代码随想录算法训练营第三十天 | 重叠区间 | 452. 用最少数量的箭引爆气球 | 435. 无重叠区间 | 763.划分字母区间 | 56. 合并区间
自己实现中遇到哪些困难435. 无重叠区间:没想到解法:移除区间数 = 总区间数 - 最大独立区间数今日收获,记录一下自己的学习时间452 射气球:让尽可能多的气球进行重叠,然后射击重叠区435 无重叠区:让区间尽可能重叠,获得更多的独立重叠区域763 划分字母区间:得到字母的分布区间,然后计算独立的重叠区域边界56 合并区间:合并区间,得到重叠区间的最大左右边界。452. 用最少数量的箭引爆气球代码随想录452. 用最少数量的箭引爆气球 - 力扣(LeetCode)
2024-11-28 17:57:24
858
原创 代码随想录算法训练营第二十九天 | 134. 加油站 | 135. 分发糖果 | 860.柠檬水找零 | 406.根据身高重建队列
自己实现中遇到哪些困难今日收获,记录一下自己的学习时间加油站:局部最优:排除不能完成剩余路程的加油站;全局最优:剩余油量不为负分糖果:两边要分开考虑,先考虑满足左边的情况,再考虑满足右边的情况柠檬水:找零尽量找面额大的纸币,节省纸币数量身高建队列:先考虑一个方向,在此基础上考虑另外一个方向。134. 加油站本题有点难度,不太好想,推荐大家熟悉一下方法二代码随想录134. 加油站 - 力扣(LeetCode)
2024-11-27 16:23:23
1069
原创 代码随想录算法训练营第二十八天 | 122.买卖股票的最佳时机II | 55. 跳跃游戏 | 45. 跳跃游戏Ⅱ | 1005.K次取反后最大化的数组和
自己实现中遇到哪些困难培养贪心的思考方式如果没有贪心的思考方式(局部最优,全局最优),很容易陷入贪心简单题凭感觉做,贪心难题直接不会做,其实这样就锻炼不了贪心的思考方式了。所以明知道是贪心简单题,也要靠贪心的思考方式来解题,这样对培养解题感觉很有帮助今日收获,记录一下自己的学习时间小总结只收集每天的正利润得到最大利润。局部最优:移动下标每次取最大跳跃覆盖范围,全局最优:整体最大覆盖范围局部最优:当前这步的最大覆盖;全局最优:达到终点,步数最少。局部最优。
2024-11-26 18:16:41
926
原创 代码随想录算法训练营第二十七天 | 455.分发饼干 | 376. 摆动序列 | 53. 最大子序和
自己实现中遇到哪些困难考虑多种特殊情况今日收获,记录一下自己的学习时间贪心理论基础代码随想录手动模拟一下感觉可以局部最优推出整体最优,而且想不到反例,那么就试一试贪心。贪心有时候就是常识性的推导,所以会认为本应该就这么做!贪心解题步骤将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解做题的时候,只要想清楚 局部最优 是什么,如果推导出全局最优,其实就够了。找不到例外的情况455.分发饼干代码随想录代码随想录。
2024-11-25 15:47:40
892
原创 代码随想录算法训练营第二十三天 | 491.递增子序列 | 46.全排列 | 47.全排列 II
自己实现中遇到哪些困难组合问题和分割问题都是收集树的叶子节点子集问题和子序列问题是找树的所有节点!排列问题收集path.size == nums.size的序列,之前的节点可以复用,对顺序有要求。491递增子序列,这里必须用set去重,因为重复元素可能并不相邻。46全排列,收集结果的时候,确定叶子节点的方式为当前path是否收集足够元素。并不能确定收集树的高度为 startIdx < nums.length把树画一遍就好了,光想象可能会出错47全排列,树枝去重,树层去重。
2024-11-22 18:10:16
464
原创 代码随想录算法训练营第二十一天 | 93.复原IP地址 | 78.子集
自己实现中遇到哪些困难一句话讲明白问题分类组合问题和分割问题都是收集树的叶子节点子集问题是找树的所有节点!切割字符串问题回顾昨天的切割回文子串,和今天的切割ip地址,都是需要将字符串拆分成 n 份。只不过每一小份的长度不定,切完当前这一小份,再交给下层去切割剩余部分。今日收获,记录一下自己的学习时间。
2024-11-20 18:53:28
456
原创 代码随想录算法训练营第十九天 | 理解回溯 | 77. 组合 | 216.组合总和II | I7.电话号码的字母组合
自己实现中遇到哪些困难今日收获,记录一下自己的学习时间。
2024-11-18 19:14:39
702
原创 代码随想录算法训练营第十八天 | 二叉搜索树
二叉树合并二叉搜索树的特性,中序遍历是有序数组二叉搜索树的陷阱,需要从全局确认,小心极值的比较公共祖先问题,从下到上二叉树,平衡树,完全树,搜索树,满树二叉搜索树插入,删除。
2024-11-15 16:32:21
999
原创 代码随想录算法训练营第十七天 | 654.最大二叉树 | 617.合并二叉树 | 700.二叉搜索树中的搜索 | 98.验证二叉搜索树
自己实现中遇到哪些困难98.验证二叉搜索树里面有陷阱,要转成序列从全局角度检查,不能通过递归只检查当前层的。还是要找到算法的特例,多个例子测试一下,多思考一些。今日收获,记录一下自己的学习时间24:00 -数组拷贝函数654.最大二叉树(简单)又是构造二叉树,昨天大家刚刚做完 中序后序确定二叉树,今天做这个 应该会容易一些, 先看视频,好好体会一下 为什么构造二叉树都是 前序遍历代码随想录又是构造二叉树,又有很多坑!| LeetCode:654.最大二叉树_哔哩哔哩_bilibili。
2024-11-15 00:53:10
671
原创 代码随想录算法训练营第十五天 | 110.平衡二叉树 | 257. 二叉树的所有路径 | 404.左叶子之和 | 513.找树左下角的值 | 112. 路径总和 | 106.从中序与后序遍历
自己实现中遇到哪些困难中序后序重建树的时候,仔细确认一下切割边界已经不是第一次做了,虽然A过了,但是做的很慢。今日收获,记录一下自己的学习时间数组拷贝函数// 左闭右开解惑(补充)222.完全二叉树的节点个数(简单)代码随想录。
2024-11-13 20:28:37
851
原创 代码随想录算法训练营第十四天 | 226.翻转二叉树 | 101. 对称二叉树 | 104.二叉树的最大深度 | 111.二叉树的最小深度
自己实现中遇到哪些困难今日收获,记录一下自己的学习时间二叉树递归还是很简单的解惑(补充)226.翻转二叉树 (简单)
2024-11-12 19:03:39
750
原创 代码随想录算法训练营第十三天 | 二叉树题目 | 二叉树种类 | 二叉树前中后序递归 | 二叉树栈迭代 | 二叉树层序
自己实现中遇到哪些困难今日收获,记录一下自己的学习时间解惑(补充)理论基础需要了解 二叉树的种类,存储方式,遍历方式 以及二叉树的定义代码随想录。
2024-11-11 18:00:43
510
原创 代码随想录算法训练营第十一天 | 150. 逆波兰表达式求值 | 239. 滑动窗口最大值 | 347.前 K 个高频元素
自己实现中遇到哪些困难失误还是很多逆波兰表达式两个数字的顺序没弄对没有考虑完全一些特殊情况和边界情况,例如只有一个数组的时候滑动窗口没想完全,队列里存放的是比当前元素都要大的数值。今日收获,记录一下自己的学习时间解惑(补充)栈和队列总结栈先进先出是数据结构,是容器匹配问题队列滑动窗口最大值单调队列,优先级队列代码随想录150. 逆波兰表达式求值(简单)本题不难,但第一次做的话,会很难想到,所以先看视频,了解思路再去做题代码随想录。
2024-11-09 16:37:56
656
原创 代码随想录算法训练营第十天 | 232.用栈实现队列 | 20. 有效的括号 | 1047. 删除字符串中的所有相邻重复项
自己实现中遇到哪些困难失误还是很多,没有考虑完全一些特殊情况和边界情况今日收获,记录一下自己的学习时间解惑(补充)理论基础栈和队列属于容器,内部使用其他数据结构实现,提供特定操作栈:先进后出队列:先进先出Java 栈pushpoppeekisEmptyJava 队列普通队列 (LinkedList)pollpeekisEmpty优先级队列 (PriorityQueue)// 默认小顶堆// 创建大顶堆// 定义元素@Override。
2024-11-08 17:53:50
848
原创 代码随想录算法训练营第九天 | 151.反转字符串单词 | 卡码网:55.右旋转字符串 | 28. 实现 strStr() (KMP)| 459.重复的子字符串 (KMP)
自己实现中遇到哪些困难KMP 构造 next 数组KMP 字符串匹配今日收获,记录一下自己的学习时间解惑(补充)字符串总结字符串是字符数组熟悉库函数双指针反转字符串KMP(构造next数组,字符串匹配)代码随想录双指针回顾数组中移动元素字符串去出空格链表前后节点N数之和,降低一级复杂度代码随想录。
2024-11-07 18:37:48
609
原创 代码随想录算法训练营第八天 | 344. 反转字符串 | 541. 反转字符串II | 卡码网54. 替换数字
自己实现中遇到哪些困难从后向前填充的双指针思想今日收获,记录一下自己的学习时间解惑(补充)344.反转字符串 (简单)代码随想录。
2024-11-06 19:42:11
420
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人