- 博客(53)
- 收藏
- 关注
原创 leetcode刷题-图论01
本题本质还是对nums2采用单调栈的算法计算下一个最大元素,但是返回的result需要和nums1大小一致,顺序一致,因此对nums2中的元素计算完后需要映射回nums1,除此之外,本题的result数组应该初始化为-1。这里可以借助单调栈的特性,栈内的元素是单调递增的,因此在获得了某一个元素的右边第一个比它大的元素,那么栈里的下一个元素就是左边第一个比它大的元素。例如:nums = [1,2,1],扩容后:nums = [1,2,1,1,2,1]n*2 输出:[1, 2, 3, 1, 2, 3]
2025-04-09 20:15:06
868
原创 leetcode刷题-单调栈
本题本质还是对nums2采用单调栈的算法计算下一个最大元素,但是返回的result需要和nums1大小一致,顺序一致,因此对nums2中的元素计算完后需要映射回nums1,除此之外,本题的result数组应该初始化为-1。这里可以借助单调栈的特性,栈内的元素是单调递增的,因此在获得了某一个元素的右边第一个比它大的元素,那么栈里的下一个元素就是左边第一个比它大的元素。此处的单调栈是单调递减的,因为要找左边和右边第一个比它小的,中间就是大于等于它的,高度就是当前柱子的高度,宽度为中间柱子的宽度;
2025-04-09 20:05:18
1015
原创 leetcode刷题-动态规划12
115.不同的子序列 -- 递推公式略难理解583. 两个字符串的删除操作72. 编辑距离编辑距离总结篇代码随想录文档讲解。
2025-03-14 20:46:34
823
原创 leetcode刷题-动态规划11
与最长公共子序列相似,如果s是t的子序列的话,这两个字符串的最长公共子序列的长度就是s的长度。dp[i][j] 以i-1为结尾的字符串s和以j-1为结尾的字符串t的相同子序列的长度。dp[i] 以i-1为结尾的最大连续子序列的和, 返回max(dp)这个题看提交记录已经做过很多遍了,可使用暴力法、贪心法等。dp[i][0] 和 dp[0][j] = 0。dp[i][0] 和 dp[0][j] = 0。其实就是找最长公共子序列,与上题相同。两种情况:延续前面的和,从当前开始。
2025-03-12 17:18:52
484
原创 leetcode刷题-动态规划10
dp[i][j] 以i-1为结尾的nums1和j-1为结尾的nums2的最长重复子数组的长度。类似“公共子序列”,用二维数组表示两个数据的状态【编辑距离】dp[i][0] 和 dp[0][j] = 0。本题相比上题要求连续。
2025-03-08 12:54:28
400
原创 leetcode刷题-动态规划09
188.买卖股票的最佳时机IV309.最佳买卖股票时机含冷冻期714.买卖股票的最佳时机含手续费股票总结文档总结。
2025-02-24 21:44:31
737
原创 leetcode刷题-动态规划08
可买卖多次,第i天买入股票手头上的现金不是0,可能是之前买卖多次获得的利润,所以在递推公式中dp[i][0]需要改变。本题可以不用维护一个dp数组,只用4个变量即可(状态压缩)本题最多可以完成两笔交易,不能同时参与多笔交易。可用贪心法,本题相比上题改为:可买卖多次。本题这一只股票只买卖一次。暴力解法、动态规划解法。以前的提交:贪心算法。
2025-02-24 20:15:45
694
原创 leetcode刷题-动态规划07
2. 不偷这个节点value2,左右孩子都可以偷的最大值: max(leftdp[0], leftdp[1]) + max(rightdp[0], rightdp[1])1. 偷这个节点value1,左右孩子都不偷 : value[i]+leftdp[0]+rightdp[0]每一层递归中都有一个长度为2的dp数组:dp[0]、dp[1]分别表示不偷与偷当前节点获得的最大金钱数。上题是一个线性数组,本题将线性数组首尾连成环了,这样的话首元素和尾元素只能选一个或者都不选。2.考虑尾元素不考虑首元素。
2025-02-20 21:11:08
283
原创 leetcode刷题-动态规划05
与494目标和有点像(但只能使用一次->0-1背包,但本题可以使用无限次->完全背包),给我们一个集合,装满集合有多少种方法。也是一个考虑排列顺序的完全背包问题,代码中m表示最多可以爬m个台阶,代码中把m改成2就是 力扣:70.爬楼梯的解题思路。相比上题,本题需要考虑答案的顺序(集合里面考虑元素的排列顺序),排列问题,在遍历顺序上需要先遍历背包,再遍历物品。背包容量的每一个值,都是经过 1 和 5 的计算,包含了{1, 5} 和 {5, 1}两种情况。背包正序遍历,并且物品和背包可以颠倒顺序。
2025-02-17 22:36:14
779
原创 leetcode刷题-动态规划04
1049. 最后一块石头的重量 II494. 目标和(这个题好难)474.一和零(二维dp)leetcode题目链接代码随想录文档讲解思路思路逆天:这里如果用最相近的重量的石头进行相撞,得到的重量最小,因此看能不能把石头堆分成两堆重量相似的,这里[2, 7, 4, 1, 8, 1],总和为23,23//2= 11,可以把石头分成11和12,这样可得到相撞后剩余石头重量为1。尽量把石头分成重量总和近似相等的两堆。dp[j]数组的含义:装满容量为j的背包的最大重量为dp[j]
2025-02-10 21:13:10
743
原创 leetcode刷题-动态规划03
第i件物品的重量是weight[i],得到的价值是value[i]。正式开始背包问题,背包问题还是挺难的,虽然大家可能看了很多背包问题模板代码,感觉挺简单,但基本理解的都不够深入。如果做过背包类问题,可以先看视频,很多内容,是自己平时没有考虑到位的。解释:数组可以分割成 [1, 5, 5] 和 [11]。物品、重量、价值、背包的最大重量,可获得的最大价值。输入:nums = [1,5,11,5]背包重量:[1, 5, 11, 5]价值:[1, 5, 11, 5]物品:[0, 1, 2, 3]
2025-02-09 19:45:57
680
原创 leetcode刷题-贪心04
今天的三道题目,都算是 重叠区间 问题,大家可以好好感受一下。都属于那种看起来好复杂,但一看贪心解法,惊呼:这么巧妙!这种题还是属于那种,做过了也就会了,没做过就很难想出来。不过大家把如下三题做了之后, 重叠区间 基本上差不多了。
2025-02-03 18:57:49
395
原创 leetcode刷题-贪心03
新建变量:currsum,一旦它小于0,就从它的下一个站点开始重新记,因为这个站点前面的currsum是大于0的,舍弃前面的站点不会起作用,即前面哪一个站点作为起始站点都不行,尝试i+1。视频有一堆很牛的反证法证明了我疑惑的地方(区间1+区间2<0,但区间1<0,区间2>0,这个时候已经选取区间1后的第一个位置作为起始点了,而不是区间2后的第一个位置,符合解题逻辑)先从大到小排序h,确定好身高顺序,再遍历检查k,让队列满足k的熟悉(将身高小的插入到前面,这样也不会影响身高大的的位置)
2025-01-28 23:17:53
529
原创 leetcode刷题-贪心02
在当前的覆盖范围内进行遍历,同时记录下一步的最大范围,如果遍历到当前的最后一个覆盖范围,判断是否到终点了,否则,result++并更新当前的覆盖范围。因为这道题每天都可以买卖,所以一个区间就可以一天一天的进行交易,只要后一天的价格高于前一天的价格,就进行交易,获取利润。思路打开:不用管是跳几步,看覆盖范围,覆盖范围最终能不能把最后一步覆盖掉;(动态for循环,但python中不支持,用while代替)curr和next分别记录当前和下一步最大的覆盖范围。简单题,每次选最小的就可以。
2024-12-30 12:00:05
302
原创 leetcode刷题-贪心01
注意代码中的for循环和while循环的顺序不能颠倒(如果从大的开始的话)贪心算法:如果到当前的连续和为负数的话,从0开始。贪心思路:用大饼干去满足胃口大的孩子。局部最优能否推出全局最优。暴力求解:复杂度n2。
2024-12-21 21:59:47
294
1
原创 leetcode刷题-回溯算法04
集合中有重复元素,去重,(排序)(数层去重used[i-1]==False)与上一题不同,不能用used列表,因为这个题不能排序,在每一个for循环里面用一个集合记录遍历过的数。排列(考虑顺序)和组合问题(不考虑顺序)的区别。借助used数组(需要进入递归)
2024-12-20 21:49:22
289
原创 leetcode刷题-回溯算法02
题目:重复选取,警惕0,如果有0就是死循环了,(已知所有元素都为正整数没有重复元素)与上题相比不能重复,但candidate中存在重复的数,解集不能包含重复的组合。这里与前面的不同主要是在选择了一个数时,下一次要选的列表也包含这个数。树层去重的话,需要对数组排序!先排序,剪枝大于最大值的部分。
2024-12-17 19:03:48
369
原创 leetcode刷题-回溯算法01
回溯是递归的副产品,只要有递归就会有回溯。回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,如果想让回溯法高效一些,可以加一些剪枝的操作,但也改不了回溯法就是穷举的本质。【纯暴力搜索】
2024-11-06 19:51:28
318
原创 leetcode刷题-二叉树07
如下图所示,如果 从节点5继续向左遍历,那么将错过成为p的祖先, 如果从节点5继续向右遍历则错过成为q的祖先。所以当我们从上向下去递归遍历,第一次遇到 cur节点是数值在[q, p]区间中,那么cur就是 q和p的最近公共祖先。如果当前遍历到的节点的值在p和q之间,那么说明它是它们的公共祖先,那是不是最近公共祖先?如果当前遍历到的节点比p和q都大的话,说明p、q及他们的公共祖先在这个节点的左子树里;题目要求:删除二叉搜索树的节点之后还要求是一棵二叉搜索树。删除某个节点就不可避免地改变二叉树的结构了。
2024-08-30 17:29:06
449
原创 leetcode刷题-二叉树06
遇到在二叉搜索树上求什么最值啊,差值之类的,就把它想成在一个有序数组上求最值,求差值,这样就简单多了。最直观的想法,就是把二叉搜索树转换成有序数组,然后遍历一遍数组,就统计出来最小差值了。要通过父节点判断子节点是不是我们要收集的元素,一层一层收集左叶子之和,向上返回。左叶子节点:叶子节点中 && 父节点的左孩子。用后序遍历代码相对简洁 + 回溯。注意,这是二叉搜索树。递归法使用前序遍历,
2024-08-30 15:21:42
377
原创 leetcode刷题-动态规划part02
=注意:==数组初始化要这么写:dp = [[0] * n for _ in range(m)]10 = 2 × 8 (10的状态依赖2和8的状态)8 = 2 + 6 (8的状态依赖2和6的状态)若使用图论中的深度搜索、广度搜索,提交超时。在不同路径题目中添加了障碍。相当于爬楼梯题目的消费版。example:拆10。
2024-08-19 23:25:35
713
原创 leetcode刷题-动态规划part01
楼梯一共有1阶台阶:1种;三阶台阶:3种(1阶+2阶)递推关系:依赖于前两种状态,f(n)=f(n-1)+f(n-2)斐波那契数: 1 1 2 3 5 8。相当于爬楼梯题目的消费版。其实就是 斐波那契数。
2024-08-19 18:24:15
457
原创 leetcode刷题-二叉树05
左子树不是左孩子)不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的。样例中最小节点 可能是int的最小值,如果这样使用最小的int来比较也是不行的。节点的左子树只包含 小于 当前节点的数。不能单纯的比较左节点小于中间节点,右节点大于中间节点就完事了。节点的右子树只包含 大于 当前节点的数。
2024-08-16 17:23:36
577
1
原创 leetcode刷题-二叉树04
要通过父节点判断子节点是不是我们要收集的元素,一层一层收集左叶子之和,向上返回。(后序通过左右孩子返回给父节点,层层向上返回,所以可以求高度;需要额外写一个辅助函数(用于计算高度的函数)左叶子节点:叶子节点中 && 父节点的左孩子。前序 中左右 向下遍历,不向上返回结果)判断 左子树和右子树是否小于等于1。用后序遍历代码相对简洁 + 回溯。判断每个节点的左右子树的。高度:距离叶子节点的距离。深度:距离根节点的距离。递归法使用前序遍历,
2024-08-12 20:54:07
457
原创 NLP论文阅读PALM
预训练自编码和自回归语言模型用于上下文条件生成(在完成文本摘要生成任务时,遇到这个模型:PALM 2.0摘要生成模型-中文-base是PALM通用预训练生成模型在中文LCSTS数据集上进行finetune得到的文本摘要生成模型。
2024-08-05 16:46:25
348
原创 Windows安装docker及打镜像记录
在cmd中通过下述3个命令验证Docker是否正常运行时,无法执行docker run hello-world。在设置,Docker Engine中配置国内镜像。
2024-07-18 17:46:31
620
原创 leetcode刷题-二叉树03
深度为到根节点的距离,如节点20,深度为2;高度为到叶子节点的距离,如节点7,高度为1,节点20,高度为2,节点3,高度3。,前中后序都可以求得二叉树的节点个数,层序遍历的迭代法也可以。如果是满二叉树的话 ,向左遍历的深度和向右遍历的深度是相等的。子树如果为满二叉树可以根据公式计算节点数量,然后返回给根节点。除了底层节点,上面的节点都是满的,底层节点从左到右是满的。(迭代法:层序遍历)后序遍历:将孩子节点的情况返回给根节点,根节点记录。最小深度:根节点到最近叶子节点的深度。二叉树的最大深度:根节点的高度。
2024-06-12 16:11:52
880
原创 leetcode刷题-二叉树02
相关题目:LeetCode:102、104、107、111(前面已完成)、116、117、199、429、515、637。不能判断左右孩子是否相等,应该判断根节点的左子树和右子树是否可以相互翻转,↑翻转二叉树。确定遍历顺序:只能使用后序遍历(左右根),因为要不断收集左右孩子的信息返回给上一个节点。图论中的深度搜索和广度搜索分别对应二叉树中的递归遍历和层序遍历。想清楚这道题目应该用哪种遍历方式:递归(前、中、后序)?依赖队列完成,每一层要记录队列中的size,以便后续弹出元素。本题使用前序或者后序最为方便。
2024-06-11 20:39:30
567
原创 leetcode刷题-栈与队列03
239. 滑动窗口最大值347.前 K 个高频元素栈与队列总结栈与队列的底层实现栈经典题目括号匹配、字符串去重、逆波兰表达式队列经典题目滑动窗口最大问题、求前K个高频元素通过求滑动窗口最大值,以及前K个高频元素介绍了两种队列:单调队列和优先级队列,这是特殊场景解决问题的利器,是一定要掌握的。
2024-06-06 11:33:12
538
原创 leetcode刷题-栈与队列02
来解决,该题难点在于删除完目前存在的重复项之后可能会出现新的重复项,类似消消乐游戏。遍历完后,如果栈中还存有元素(栈不为空)【说明不匹配,字符串无效,情况1】没有必要真的用一个栈,可以使用一个字符串去模拟栈的行为,【若字符串还没遍历完,栈为空,说明字符串无效,情况3】遇到右括号,弹出栈中的元素,比较两个右括号是否一样。注意:将字符串的尾部作为栈的出口,头部作为栈的顶部。【若不匹配,说明字符串无效,情况2】-7 // 2 # 结果为 -4。7 // -2 # 结果为 -4。6//-132 结果为 -1。
2024-06-04 00:30:19
973
原创 git使用
执行 git branch -M main时,提示 error: refname refs/heads/master not found。进行改名操作,将master改为main,改名之后还不行,那注意可能漏掉了commit。如果vscode中有不想上传到github上的文件,可以存放在.ignore文件夹下。完成ssh key及后续的设置。
2024-05-28 21:09:07
256
原创 leetcode刷题-栈与队列01
栈提供push 和 pop 等等接口,所有元素先进后出,所以栈不提供走访功能,也不提供迭代器(iterator)。因此这里使用双向队列,我们保证只执行popleft()和append(),因为deque可以用索引访问,可以实现和peek相似的功能。在push数据的时候,只要数据放进输入栈就好,但在pop的时候,操作就复杂一些,输出栈如果为空,就把进栈数据。用一个队列即可实现栈的进出元素,将前面的元素取出来后再加入队列中,弹出队列元素数量-1个元素。用两个栈(输入栈、输出栈)实现一个队列的行为。
2024-05-24 20:47:37
676
1
原创 leetcode刷题-字符串02
卡码网题目链接代码随想录文档讲解思路python代码lst = list(s) # Python里面的string也是不可改的,所以也是需要额外空间的。空间复杂度:O(n)。
2024-05-10 21:28:52
585
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人