代码随想录算法训练营
像影子追着光梦游_
我很好奇
展开
-
day55
这道题目算是 编辑距离问题 的入门题目(毕竟这里只是涉及到减法),慢慢的,后面就要来解决真正的 编辑距离问题了。但相对于刚讲过 392.判断子序列,本题 就有难度了 ,感受一下本题和 392.判断子序列 的区别。第九章 动态规划part15。115.不同的子序列。115.不同的子序列。原创 2023-08-29 17:19:39 · 209 阅读 · 0 评论 -
day52
本题相对于昨天的动态规划:300.最长递增子序列 最大的区别在于“连续”。先尝试自己做做,感受一下区别。今天开始正式子序列系列,本题是比较简单的,感受感受一下子序列题目的思路。674. 最长连续递增序列。718. 最长重复子数组。674. 最长连续递增序列。稍有难度,要使用二维dp数组了。第九章 动态规划part13。718. 最长重复子数组。300.最长递增子序列。300.最长递增子序列。原创 2023-08-29 17:18:24 · 188 阅读 · 0 评论 -
day51
相对122.买卖股票的最佳时机II ,本题只需要在计算卖出操作的时候减去手续费就可以了,代码几乎是一样的,可以尝试自己做一做。本题加了一个冷冻期,状态就多了,有点难度,大家要把各个状态分清,思路才能清晰。714.买卖股票的最佳时机含手续费。714.买卖股票的最佳时机含手续费。309.最佳买卖股票时机含冷冻期。309.最佳买卖股票时机含冷冻期。第九章 动态规划part12。股票问题做一个总结吧。原创 2023-08-29 17:17:17 · 184 阅读 · 0 评论 -
day50
这道题一下子就难度上来了,关键在于至多买卖两次,这意味着可以买卖一次,可以买卖两次,也可以不买卖。本题是123.买卖股票的最佳时机III 的进阶版。123.买卖股票的最佳时机III。123.买卖股票的最佳时机III。188.买卖股票的最佳时机IV。188.买卖股票的最佳时机IV。第九章 动态规划part11。原创 2023-08-29 17:16:42 · 128 阅读 · 0 评论 -
day56
本题和动态规划:115.不同的子序列 相比,其实就是两个字符串都可以删除了,情况虽说复杂一些,但整体思路是不变的。最终我们迎来了编辑距离这道题目,之前安排题目都是为了 编辑距离做铺垫。583. 两个字符串的删除操作。583. 两个字符串的删除操作。第九章 动态规划part16。原创 2023-08-29 17:15:39 · 63 阅读 · 0 评论 -
day58
大家可以读题,思考暴力的解法,然后在看单调栈的解法。就能感受出单调栈的巧妙。本题和 739. 每日温度 看似差不多,其实 有加了点难度。今天正式开始单调栈,这是单调栈一篇扫盲题目,也是经典题。496.下一个更大元素 I。496.下一个更大元素 I。原创 2023-08-29 17:14:35 · 76 阅读 · 0 评论 -
day59
建议是掌握 双指针 和单调栈,因为在面试中 写出单调栈可能 有点难度,但双指针思路更直接一些。在时间紧张的情况有,能写出双指针法也是不错的,然后可以和面试官在慢慢讨论如何优化。接雨水这道题目是 面试中特别高频的一道题,也是单调栈 应用的题目,大家好好做做。这道题和 739. 每日温度 几乎如出一辙,可以自己尝试做一做。503.下一个更大元素II。503.下一个更大元素II。第十章 单调栈part02。原创 2023-08-29 17:13:42 · 297 阅读 · 0 评论 -
day60
今天是训练营最后一天,恭喜坚持两个月的录友们,接下来可以写一篇自己 代码随想录一刷的总结。好好回顾一下,这两个月自己的博客内容,以及自己的收获。有了之前单调栈的铺垫,这道题目就不难了。第十章 单调栈part03。84.柱状图中最大的矩形。原创 2023-08-29 17:13:01 · 84 阅读 · 0 评论 -
day61
第一次系统地刷leetcode 经过两个多月终于一刷完结 虽然不是按部就班每天都写 但总算坚持下来了 夸夸自己!原创 2023-08-29 17:11:40 · 59 阅读 · 0 评论 -
day49 第九章 动态规划part10● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II
122.买卖股票的最佳时机II。121. 买卖股票的最佳时机。第九章 动态规划part10。原创 2023-08-26 18:49:15 · 140 阅读 · 0 评论 -
day57第九章 动态规划part17 647. 回文子串 516.最长回文子序列 动态规划总结篇
第九章 动态规划part17。516.最长回文子序列。原创 2023-08-22 23:18:02 · 118 阅读 · 0 评论 -
Day52 第九章 动态规划part13 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组
674. 最长连续递增序列。718. 最长重复子数组。第九章 动态规划part13。300.最长递增子序列。原创 2023-08-21 05:52:32 · 36 阅读 · 0 评论 -
day46 第九章 动态规划part08● 139.单词拆分
【代码】day46 第九章 动态规划part08● 139.单词拆分。原创 2023-08-20 05:51:00 · 129 阅读 · 0 评论 -
day53 第九章 动态规划part14● 1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和 动态规划
【代码】day53 第九章 动态规划part14● 1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和 动态规划。原创 2023-08-20 05:21:22 · 156 阅读 · 0 评论 -
day45 ● 70. 爬楼梯 (进阶)● 322. 零钱兑换 ● 279.完全平方数
【代码】day45 ● 70. 爬楼梯 (进阶)● 322. 零钱兑换 ● 279.完全平方数。原创 2023-08-18 00:22:02 · 217 阅读 · 0 评论 -
代码随想录算法训练营第44天 完全背包● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ
【代码】代码随想录算法训练营第44天 完全背包● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ。原创 2023-08-14 06:33:27 · 62 阅读 · 0 评论 -
代码随想录算法训练营第43天● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零
【代码】代码随想录算法训练营第43天● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零。原创 2023-08-10 08:47:43 · 68 阅读 · 0 评论 -
代码随想录算法训练营第41天 343. 整数拆分 96.不同的二叉搜索树
【代码】代码随想录算法训练营第40天 343. 整数拆分 96.不同的二叉搜索树。原创 2023-08-08 08:08:33 · 54 阅读 · 0 评论 -
代码随想录算法训练营第39天 动态规划 62.不同路径 63. 不同路径 II
【代码】代码随想录算法训练营第39天 动态规划 62.不同路径 63. 不同路径 II。原创 2023-08-06 02:08:21 · 855 阅读 · 0 评论 -
代码随想录算法训练营第38天 动态规划 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
【代码】代码随想录算法训练营第38天 动态规划 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯。原创 2023-08-05 08:56:43 · 44 阅读 · 0 评论 -
代码随想录算法训练营第36天 435. 无重叠区间 763.划分字母区间 56. 合并区间
435.无重叠区间class Solution { public int eraseOverlapIntervals(int[][] intervals) { if(intervals.length == 0){ return 0; } // 根据结束时间对区间进行排序 Arrays.sort(intervals,(a,b) -> a[1] -b[1]); int count原创 2023-08-02 23:42:20 · 36 阅读 · 0 评论 -
代码随想录算法训练营第35天 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
通过模拟整个交易过程来解决这个问题。在这个过程中,需要跟踪你手头有多少 5 美元和 10 美元的钞票。每当有人支付 5 美元时,可以直接接受付款。当有人支付 10 美元时,需要有一张 5 美元的钞票来找零。当有人支付 20 美元时,需要有一张 10 美元和一张 5 美元的钞票或者三张 5 美元的钞票来找零。如果在任何时候不能找零,那么返回。否则,可以通过整个过程,返回。原创 2023-08-01 06:20:14 · 67 阅读 · 0 评论 -
代码随想录算法训练营第34天1005.K次取反后最大化的数组和 134. 加油站135. 分发糖果
【代码】代码随想录算法训练营第34天1005.K次取反后最大化的数组和 134. 加油站135. 分发糖果。原创 2023-08-01 05:49:30 · 36 阅读 · 0 评论 -
代码随想录算法训练营第32天122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II
你只需遍历价格数组,如果发现第二天的价格高于当天的价格,就在当天买入,并在第二天卖出。重复这个过程,你将能够获得最大利润,由于只进行了一次遍历,这个算法的时间复杂度是O(n),其中 n 是价格数组的长度。这种贪心的方法是因为可以在同一天买入和卖出股票,所以没有必要跳过任何可能的盈利机会。原创 2023-07-29 23:38:40 · 38 阅读 · 0 评论 -
代码随想录算法训练营第31天 455.分发饼干 376. 摆动序列 53. 最大子序和
无论当前饼干是否满足当前孩子的胃口,每次迭代中,如果当前饼干可以满足当前孩子的胃口(即。指针的位置,这就是最多可以满足的孩子数。的任一数组被完全遍历后,返回。指针总是向前移动一位。首先,将孩子的胃口数组。原创 2023-07-29 09:02:48 · 125 阅读 · 0 评论 -
代码随想录算法训练营第30天 332.重新安排行程 51. N皇后 37. 解数独
所以回溯法也经常和二叉树遍历,深度优先搜索混在一起,因为这两种方式都是用了递归。回溯法就是暴力搜索,并不是什么高效的算法,最多再剪枝一下。原创 2023-07-29 07:23:19 · 39 阅读 · 0 评论 -
代码随想录算法训练营第29天 491.递增子序列 46.全排列 47.全排列 II
【代码】代码随想录算法训练营第29天 491.递增子序列 46.全排列 47.全排列 II。原创 2023-07-29 07:21:40 · 56 阅读 · 0 评论 -
代码随想录算法训练营第28天 93.复原IP地址 78.子集 90.子集II
首先会检查输入的数组是否为空,如果为空则直接返回一个空的结果集。然后,它会使用回溯方法(backtrack)来生成所有可能的子集。在每一次递归调用中,它都会将当前的临时列表(tempList)添加到结果集中,然后尝试将当前元素添加到临时列表中,并进入下一层递归。在回到这一层递归后,它会撤销上一步的操作(即将当前元素从临时列表中移除),以便在下一次循环中尝试不添加当前元素。原创 2023-07-29 07:05:05 · 233 阅读 · 0 评论 -
代码随想录算法训练营第27天第七章 回溯算法part03● 39. 组合总和● 40.组合总和II● 131.分割回文串
【代码】代码随想录算法训练营第27天第七章 回溯算法part03● 39. 组合总和● 40.组合总和II● 131.分割回文串。原创 2023-07-25 08:53:46 · 41 阅读 · 0 评论 -
代码随想录算法训练营第25天 216.组合总和III● 17.电话号码的字母组合
【代码】代码随想录算法训练营第25天 216.组合总和III● 17.电话号码的字母组合。原创 2023-07-25 08:51:12 · 33 阅读 · 0 评论 -
代码随想录算法训练营第24天 回溯算法 77. 组合
假设当前已选择的数为i,那么在下一层搜索时,我们只能从i + 1开始选择,因为题目要求每个组合中的数字必须是严格升序的。如果我们选择的数已经大于n或者剩余的未选择的数已经不足以完成k个数的选择,那么我们可以立即停止搜索,这是一种剪枝的方法。然后,对于从begin开始的每一个可能的选项,将其添加到路径中,然后进行下一层的递归。在下一层的递归开始的数字应该从i+1开始,以保证所有的数字都只使用一次。在DFS的递归函数中,首先检查当前路径的长度是否已经达到k,如果已经达到k,那么就将当前路径加入到结果列表中。原创 2023-07-22 00:44:29 · 62 阅读 · 0 评论 -
代码随想录算法训练营第23天 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树
转换规则是这样的:根据二叉搜索树的特性,一个节点的值等于它的右子树的所有节点值之和加上它自己的值和它左子树中所有比它大的节点的值之和。所以,如果我们用逆中序遍历(右-根-左的顺序)来遍历这棵树,那么我们可以使用一个累加器(accumulator)来记录已经累加过的节点值,然后在遍历到一个新节点时,把累加器的值加到新节点的值中。遍历时,用一个变量sum来存储已经遍历过的节点的值的总和,然后把这个总和赋值给当前节点。累加树是一种特殊的二叉树,其中每个节点的新值等于原树中大于或等于该节点值的所有值之和。原创 2023-07-21 02:13:35 · 45 阅读 · 0 评论 -
代码随想录算法训练营第22天 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
左子树上所有节点的值都小于根节点的值,右子树上所有节点的值都大于根节点的值。我们将新的值与根节点的值进行比较,如果新值小于当前节点的值,我们就在左子树上进行这个操作;如果新值大于当前节点的值,我们就在右子树上进行这个操作。如果遇到当前节点为空,就在这个位置插入新的值。给定一个二叉搜索树,可以利用它的性质(左子树上所有节点的值都小于根节点的值,右子树上所有节点的值都大于根节点的值)找到两个节点的最近公共祖先。原创 2023-07-19 22:03:21 · 1094 阅读 · 0 评论 -
代码随想录算法训练营第21天 530. 二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先
【代码】代码随想录算法训练营第21天 530. 二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先。原创 2023-07-19 09:08:25 · 68 阅读 · 0 评论 -
代码随想录算法训练营第20天 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树
【代码】代码随想录算法训练营第20天 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树。原创 2023-07-18 03:51:35 · 68 阅读 · 0 评论 -
代码随想录算法训练营第18天 513. 找树左下角的值 112. 路径总和 113. 路径总和ii 106.从中序与后序遍历序列构造二叉树,105.从前序与中序遍历序列构造二叉树
【代码】代码随想录算法训练营第18天 513. 找树左下角的值 112. 路径总和 113. 路径总和ii 106.从中序与后序遍历序列构造二叉树,105.从前序与中序遍历序列构造二叉树。原创 2023-07-16 00:37:59 · 34 阅读 · 0 评论 -
代码随想录算法训练营第16天 104.二叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数
如果左子树的高度等于右子树的高度,那么左子树是满的,我们可以直接得到左子树的节点数,然后递归计算右子树的节点数。如果左子树的高度不等于右子树的高度,那么右子树是满的但是高度较小,我们可以直接得到右子树的节点数,然后递归计算左子树的节点数。计算最小深度时,如果一个节点只有左子树或只有右子树,那么它的最小深度实际上应该是它的左子树或右子树的最小深度+1,而不是直接返回1。否则,树的最大深度就是左子树的最大深度和右子树的最大深度中的较大值,再加上1。如果二叉树是空的,那么节点个数就是0。原创 2023-07-14 02:55:47 · 177 阅读 · 0 评论 -
代码随想录算法训练营第15天 102.二叉树的层序遍历 226.翻转二叉树 101.对称二叉树 2
这是因为在中序遍历中,我们需要先处理左子树,然后处理当前节点,最后处理右子树,如果在处理当前节点时交换左右子树,那么处理右子树时实际上处理的是原来的左子树,所以不能得到正确的结果。首先递归地翻转了当前节点的左子树和右子树,然后在返回到当前节点时,交换了它的左子树和右子树。在时间复杂度和空间复杂度方面,是O(n)和O(h),其中n是二叉树中的节点数,h是二叉树的高度。把交换左右子树的代码放在了一个单独的方法中,这使得代码更易于理解和维护。前序遍历和后序遍历都可以用来解决这个问题,原创 2023-07-13 08:32:21 · 117 阅读 · 0 评论 -
代码随想录算法训练营第14天 144.二叉树的前序遍历45.二叉树的后序遍历94.二叉树的中序遍历
该preorderTraversal方法是主函数,以二叉树的根作为参数调用。它初始化一个空列表result并preorder使用root和result作为参数调用辅助函数。然后它返回包含前序遍历结果的列表。之后,它首先在左子树上递归调用自身,然后在右子树上递归调用自身。这遵循前序遍历的顺序:根、左、右。首先,它检查当前子树的根是否为null。如果是,它只是返回而不做任何事情。这是递归的基本情况。代码是用于二叉树前序遍历的 Java 解决方案。然后,它将当前节点的值添加到列表中。原创 2023-07-12 05:15:42 · 77 阅读 · 0 评论 -
代码随想录算法训练营第13天| LeetCode 239. 滑动窗口最大值 347.前 K 个高频元素
接着遍历了哈希表,如果堆的大小小于 k,就将当前元素加入堆中。否则,如果当前元素的频率大于堆顶元素的频率,就用当前元素替换堆顶元素。最后将堆中的元素取出,这就是出现频率最高的 k 个元素。遍历整个输入数组,对于数组中的每个元素,如果队列不为空且队列头部的元素已经不在窗口中,就将其从队列中删除。然后从队列尾部开始,删除所有小于当前元素的元素。最后,如果遍历到的元素已经是窗口的最后一个元素,那么将队列头部的元素添加到结果数组中。这是因为队列头部的元素总是当前窗口中的最大元素。在遍历结束后,返回结果数组即可。原创 2023-07-10 02:58:50 · 131 阅读 · 0 评论