- 博客(33)
- 收藏
- 关注
原创 代码随想录算法训练营|单调栈62
明确问题,问题就已经解决了一半了。我们可以考虑这样的思路:将原始数组 “翻倍”,就是在后面再接一个原始数组,这样的话,按照之前“比身高”的流程,每个元素不仅可以比较自己右边的元素,而且也可以和左边的元素比较了。//为了找到某个数在nums2右边中第一个比其大的数,所以可以从后开始遍历。//最后若栈为空,则在nums2[i]右边没有比其大的数。//若当前遍历的值比nums2[i]大,则压入栈中。//栈不为空,则栈顶元素即为所求。//各数组中没有相同元素。而是利用循环数组的技巧来模拟。
2023-10-16 11:56:47 107
原创 代码随想录算法训练营|D57
利用双指针的方法更为简单参考题解:作者:Dawei-Simayi链接:https://leetcode.cn/problems/distinct-subsequences/solutions/521343/wan-quan-gao-dong-zui-chang-gong-gong-zi-1lrx/这道题是一道比较难的最长公共子序列题目。解决这种题的思路就是画一个棋盘 首先通过画棋盘来推导动态转移方程,题目有难度,肯定不要想着通过逻辑去推导。最直接的方法就是通过一个实例,来推导出动态转移方程。
2023-10-05 16:24:16 110
原创 代码随想录算法训练营|D55-D56 子序列问题
dp[i]数组含义是,以num[i]结尾的最长连续递增序列的长度dp[i][j] :以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]。根据dp[i][j]的定义,dp[i][j]的状态只能由dp[i - 1][j - 1]推导出来。即当A[i - 1] 和B[j - 1]相等的时候,dp[i][j] = dp[i - 1][j - 1] + 1;
2023-10-04 17:44:01 117
原创 代码随想录算法训练营|买卖股票D49-D51
最后求的利润最大值就保存在 dp[n-1][0]、dp[n-1][1]、dp[n-1][2]、dp[n-1][3]、dp[n-1][4]中,我们求出这几个值的max再返回就可以了。那么dp[i][0] = max(dp[i - 1][0], dp[i - 1][3] - prices[i], dp[i - 1][1] - prices[i]);操作一:前一天就是持有股票状态(状态一),dp[i][0] = dp[i - 1][0]即:dp[i][2] = dp[i - 1][0] + prices[i];
2023-10-04 14:17:32 87
原创 代码随想录算法训练营|打家劫舍D48
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,。给定一个代表每个房屋存放金额的非负整数数组,计算你,一夜之内能够偷窃到的最高金额。[1,2,3,1]4偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4。12偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。
2023-10-03 15:06:17 50
原创 代码随想录算法训练营|线性规划:背包问题(D42-D46)
参考链接:https://leetcode.cn/problems/partition-equal-subset-sum/solutions/783988/yi-pian-wen-zhang-chi-tou-bei-bao-wen-ti-a7dd/
2023-10-02 16:13:30 218
原创 代码随想录算法训练营|动态规划: 343. 整数拆分,96.不同的二叉搜索树
返回满足题意的二叉搜索树的种数。),并使这些整数的乘积最大化。个节点组成且节点值从。尽可能多的分3,推导见。你可以获得的最大乘积。
2023-10-01 17:45:27 69
原创 代码随想录算法训练营|动态规划:D39不同路径,不同路径Ⅱ
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格的左上角 (起始点在下图中标记为 “Start” )。1. 向右 -> 向右 -> 向下 -> 向下。2. 向下 -> 向下 -> 向右 -> 向右。3x3 网格的正中间有一个障碍物。网格中的障碍物和空位置分别用。从左上角到右下角一共有。
2023-10-01 17:06:20 1038
原创 代码随想录算法训练营|动态规划DAY38
②dp[i]表示爬到第i层可以有的方法个数,所以dp[i]等于dp[i-1]爬一个台阶,dp[i-2]爬两个台阶。- 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。- 支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。- 支付 15 ,向上爬两个台阶,到达楼梯顶部。- 支付 1 ,向上爬一个台阶,到达楼梯顶部。
2023-10-01 16:35:54 30
原创 代码随想录算法训练营|回溯专题(37.解数独)
backtracking函数中,参数使用了引用符号,如此,若backtracking(board)返回的为true的同时。当board[i][j]中没有填数时才需要对其填充不要忘了这一条件。编写一个程序,通过填充空格来解决数独问题。数独部分空格内已填入了数字,空白格用。注意二维数组行与列的大小是如何取的。board也已经填充完毕了。
2023-09-03 17:52:25 50
原创 代码随想录算法训练营|回溯专题(N皇后问题)
按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。注意在for语句中的条件同时满足,也是要加&&的。的棋盘上,并且使皇后彼此之间不能相互攻击。如上图所示,4 皇后问题存在两个不同的解法。的棋子放置方案,该方案中。每一种解法包含一个不同的。分别代表了皇后和空位。
2023-09-02 20:59:25 59
原创 代码随想录算法训练营DAY29|回溯专题(全排列部分)
具体去重方法还是会出错!,观看代码随想录相关内容后完成代码。,视频中讲解去重很清楚,复习时看相关内容。为了方便去重,首先将nums进行排序。注意vector的初始化方式。给定一个不含重复数字的数组。
2023-09-02 20:20:32 43
原创 代码随想录算法训练营DAY23|108.将有序数组转换为二叉搜索树,538.把二叉搜索树转换为累加树
输出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点。二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。由题可得,应是按照右中左的顺序进行遍历累加(即反中序遍历)的新值等于原树中大于或等于。排列,请你将其转换为一棵。
2023-08-31 16:57:43 43
原创 代码随想录算法训练营DAY21|530.二叉搜索树的最小绝对差,501.二叉搜索树中的众数,236.二叉树的最近公共祖先,235.二叉搜索树的最近公共祖先
然后调用sort函数sort(vec.begin(),vec.end(),cmp)。我们只要根据数组中的元素类型定义cmp函数的参数,并且根据需求定义函数体。便可以根据pair中first的值进行升序排序。sort默认排序从小到大。
2023-08-30 19:12:24 120 1
原创 代码随想录算法训练营DAY22|701.二叉搜索树中的插入操作,450.删除二叉搜索树中的节点,669.修剪二叉搜索树
链接:https://leetcode.cn/problems/delete-node-in-a-bst/solutions/582561/miao-dong-jiu-wan-shi-liao-by-terry2020-tc0o/其左右子节点都有:其左子树转移到其右子树的最左节点的左子树上,然后右子树顶替其位置,由此删除了该节点。例如插入元素10 ,需要找到末尾节点插入便可,一样的道理来插入元素15,插入元素0,插入元素6,其无左子:其右子顶替其位置,删除了该节点;
2023-08-30 18:37:55 54 1
原创 代码随想录算法训练营DAY20|654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树
合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;- [3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5]。- [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1]。- [2,1] 中的最大值是 2 ,左边部分是 [] ,右边部分是 [1]。- [0,5] 中的最大值是 5 ,左边部分是 [0] ,右边部分是 []。- 只有一个元素,所以子节点是一个值为 1 的节点。- 空数组,无子节点。
2023-08-29 22:12:01 132 1
原创 代码随想录算法训练营DAY18|(可见DAY17相关补充内容)513.找树左下角的值,112.路径总和,106.从中序与后续遍历序列构造二叉树
②中序遍历与后续遍历的左部分相同(左中右,左右中)②前序遍历与中续遍历的右部分相同(中左右,左中右)的路径,这条路径上所有节点值相加等于目标和。等于目标和的根节点到叶节点路径如上图所示。注意:①后序遍历的最后一位一定为根节点。注意:①前向遍历的第一位一定为根节点。假设二叉树中至少有一个节点。和一个表示目标和的整数。是指没有子节点的节点。
2023-08-28 20:07:47 48
原创 代码随想录算法训练营DAY17|平衡二叉树,二叉树所有路径,左叶子之和(没啥头绪,需复习)
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24。但是当construc_paths的传入参数中的。之后,输出的结果一直为空集。,返回所有左叶子之和。
2023-08-28 08:37:44 47
原创 代码随想录算法训练营DAY16|104.二叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数
当 root 节点左右孩子有一个为空时,返回不为空的孩子节点的深度(此时叶子节点肯定在不为空的孩子节点下)当 root 节点左右孩子都不为空时,返回左右孩子较小深度的节点值。叶子节点的定义是左孩子和右孩子都为 null 时叫做叶子节点。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。当 root 节点左右孩子都为空时,返回 1。给定一个二叉树,找出其最小深度。这道题的关键是搞清楚递归结束条件。叶子节点是指没有子节点的节点。
2023-08-24 15:40:43 62 1
原创 代码随想录算法训练营DAY15|层序遍历模板(需复习),翻转二叉树,对称二叉树
给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化的输出按层序遍历排列,同一层节点由 next 指针连接,'#' 标志着每一层的结束。填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为。,其所有叶子节点都在同一层,每个父节点都有两个子节点。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。,翻转这棵二叉树,并返回其根节点。叶子节点是指没有子节点的节点。
2023-08-24 11:02:39 141 1
原创 代码随想录算法训练营DAY13(优先队列,双端队列)|239. 滑动窗口最大值,347. 前 K 个高频元素。(都不太明白,周末需复习)
链接:https://leetcode.cn/problems/top-k-frequent-elements/solutions/1283998/c-xiao-bai-you-hao-you-xian-dui-lie-de-j-53ay/当数据类型并不是基本数据类型,而是自定义的数据类型时,就不能用greater或less的比较方式了,而是需要自定义比较方式。②设置的pop函数,当需要删除的数值为上一滑动窗口的最大值时,就将其去除,保证了下一滑动窗口的最大值不受该值影响。你只可以看到在滑动窗口内的。
2023-08-22 16:36:59 26 1
原创 代码随想录算法训练营DAY11|20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6。该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9。在完成所有重复项删除操作后返回最终的字符串。在 S 上反复执行重复项删除操作,直到无法继续删除。返回一个表示表达式值的整数。
2023-08-19 23:15:12 32
原创 代码随想录算法训练营第八天|344.反转字符串,541.反转字符串II,剑指 Offer 05. 替换空格,151.翻转字符串里的单词(周末需复习),剑指 Offer 58 - II. 左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。不应当为fast-=2,少了,应该为fast-=3到下一个字母,或者在for循环条件上加上fast--,将else中的fast--去掉。注:没有想好如何去除多余空格,题解中的方法为,利用双指针,删除所有空格,然后在每个单词后添加空格。为reverse字符串的[begin+i,begin+i+k-1]或[begin+i,begin+i+k)。
2023-08-16 17:15:07 57 1
原创 代码随想录算法训练营第七天|454.四数相加Ⅱ,383.赎金信,15.三数之和,18.四数之和(周末需复习)
本次需要注意的点比较多,周末应当复习。
2023-08-15 18:40:49 39 1
原创 代码随想录算法训练营第六天|242.有效的字母异位词,349. 两个数组的交集,202.快乐数,1.两数之和
什么时候想到用哈希法,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。
2023-08-14 22:12:32 124
原创 代码随想录训练营第四天|24. 两两交换链表中的节点,19. 删除链表的倒数第 N 个结点 ,面试题 02.07. 链表相交,
审题:链表相交之后,后续从使用的节点相同,所以可以考虑,在得到两个链表的长度之后,将两个链表的末尾对齐,从长链表的短链表位置与短链表同时开始遍历,当节点相同时便为相交节点。之前做过该题,求倒数第n个节点则可使用双指针的方式来进行,令两个指针之间间隔为n+1,则当快指针fast指向链表末尾的NULL时,慢指针slow指向链表的倒数第n+1节点,给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。
2023-08-12 20:28:38 334 1
原创 代码随想录算法训练营第三天|203. 移除链表元素,707.设计链表,206.反转链表
在实现过程中总会出现错误,在了解leetcode官方题解以及代码随想录的题解之后,发现两者均使用了_size这一变量,借助这一变量即其他相关变量不断遍历节点到需要作改动的节点的位置。第一次cur->next = cur->next->next改变的只是虚拟头节点的指向的下一节点,原本指向的是头节点,现在指向的是头节点的下一个节点,但是头节点的指向一直未改变,head = [7,7,7,7]未改变,所以最后应加上head = dummy->next;,请你反转链表,并返回反转后的链表。
2023-08-11 19:22:59 425 1
原创 代码随想录Day2补充刷题|删除二叉搜索树中的节点
题目:给定一个二叉搜索树的根节点和一个值,删除二叉搜索树中的对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。
2023-08-11 01:36:57 31 1
原创 代码随想录算法训练营第二天|977.有序数组的平方,209.长度最小的子数组, 59.螺旋矩阵II
由于已经刷过该题,在见到该题之后便想到使用双指针的方式,分别从首尾开始移动,分别对比前后双指针对应元素的平方值,将最大的平方值存入结果中(因为数组非递减),由此则结果数组中的元素非递增,所以最后使用reverse()将结果数组翻转。题目:给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。该题初见便尝试使用双指针的方法,实际上与代码随想录的答案滑动窗口方法的思想一致。不要忘了result-=nums[slow],因为想要找到元素个数最小的情况。
2023-08-10 17:03:30 661 1
原创 代码随想录算法训练营第一天|704.二分查找,27.移除元素
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。做第一题时,脑子里隐约有印象使用二分查找时会使用到不断改变的left与right,但是忘记了其迭代条件,最后还是用暴力的方法提交的该题。由于之前刷过一部分代码随想录,所以看到题目的第一反应就是利用双指针的方式,当fast指向val时,slow不移动,fast指向下一元素。自己具体提交的错误!的元素,并返回移除后数组的新长度。
2023-08-09 16:37:44 768 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人