
算法进修
文章平均质量分 67
记录每天学习的力扣算法
Aubyn11
这个作者很懒,什么都没留下…
展开
-
算法导论——Data Structures and Dynamic Arrays 笔记
同一个问题可以用不同的数据结构来解决。原创 2024-09-23 19:29:31 · 1075 阅读 · 0 评论 -
力扣0123——买卖股票的最佳时机III
使用动态规划,运用二维数组,设置四列,[i][0]表示买入一次,[i][1]表示卖出一次,[i][2]表示买入两次,[i][3]表示卖出两次。**注意:**你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。设计一个算法来计算你所能获取的最大利润。个元素是一支给定的股票在第。给定一个数组,它的第。原创 2024-02-04 09:41:49 · 1206 阅读 · 0 评论 -
力扣0122——买卖股票的最佳时机II
因为不是只能购买一次,所以只要是后一天的利润大于前一天都可以直接卖出。在每一天,你可以决定是否购买和/或出售股票。你也可以先购买,然后在。原创 2024-02-04 09:43:23 · 483 阅读 · 0 评论 -
力扣0121——买卖股票的最佳时机
因为直接双层嵌套循环,时间复杂度为O(n!),时间复杂度不达标,所以需要降低复杂度,可以运用一次遍历,求出当前位置获得利润的最大值。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回。设计一个算法来计算你所能获取的最大利润。买入这只股票,并选择在。原创 2024-02-03 14:13:47 · 544 阅读 · 0 评论 -
力扣0120——三角形最小路径和
也就是说,如果正位于当前行的下标。每一步只能移动到下一行中相邻的结点上。,那么下一步可以移动到下一行的下标。,找出自顶向下的最小路径和。原创 2024-02-03 10:24:47 · 958 阅读 · 0 评论 -
力扣0119——杨辉三角II
可以利用两个列表,一个列表用于获取新行,一个列表用于存储,基本的解题思路和。在「杨辉三角」中,每个数是它左上方和右上方的数的和。,返回「杨辉三角」的第。原创 2024-02-02 10:43:17 · 506 阅读 · 0 评论 -
力扣0118——杨辉三角
直接使用动态规划,操作列表即可,当内层循环为最开始和结尾时,将表内元素置为1,其余的条件即为上一行的对应位置和对应位置的前一个位置的和。在「杨辉三角」中,每个数是它左上方和右上方的数的和。,_生成「杨辉三角」的前 numRows。给定一个非负整数 _原创 2024-02-02 10:14:12 · 477 阅读 · 0 评论 -
力扣0117——填充每一个节点的下一个右侧指针II
的时候开始循环,定义一个新的空节点,并进行嵌套循环,将节点出队并用temp保存起来,如果该节点的左(右)子树不为空,就将它的左(右)子树入队,如果。填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为。元素则将出队的节点赋值给空节点的下一个节点,并将空节点移动到下一个。可以根据队列解题,将根节点入队,当队内元素不为。初始状态下,所有 next 指针都被设置为。原创 2024-02-01 15:50:54 · 428 阅读 · 0 评论 -
力扣0116——填充每一个节点的下一个右侧指针
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为。,其所有叶子节点都在同一层,每个父节点都有两个子节点。初始状态下,所有 next 指针都被设置为。直接使用双层列表,在其中赋值即可。原创 2024-01-31 18:25:54 · 478 阅读 · 0 评论 -
力扣0115——不同的子序列
其中,c1为s中的字符,c2为t中的字符。出现的个数,结果需要对。原创 2024-01-30 18:53:27 · 1064 阅读 · 0 评论 -
力扣0114——二叉树展开为链表
因为和先序遍历相同,所以可以想到利用先序遍历将所有的结点存储到列表中,之后便可以依次添加右子结点。原创 2024-01-30 12:01:32 · 413 阅读 · 0 评论 -
力扣0113——路径总和II
进行减法回溯,不同的是需要记录当前节点的值。和 0112 题的思路一致,都是对。路径总和等于给定目标和的路径。是指没有子节点的节点。原创 2024-01-29 12:16:48 · 480 阅读 · 0 评论 -
力扣0112——路径总和
使用回溯法,因为最终的结果是节点值之和,所以可以使用累减方法进行回溯,当相等的时候可以直接返回。的路径,这条路径上所有节点值相加等于目标和。和一个表示目标和的整数。是指没有子节点的节点。原创 2024-01-29 12:16:09 · 512 阅读 · 0 评论 -
力扣0111——二叉树的最小深度
使用回溯法,遍历每一个节点,当一个节点没有左子树和右子树之后结束本次遍历,将结果存储并在之后进行对比,如果和上一次的回溯结果相比本次更小则将结果替换,直到遍历完所有节点。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。给定一个二叉树,找出其最小深度。叶子节点是指没有子节点的节点。原创 2024-01-29 12:15:38 · 552 阅读 · 0 评论 -
力扣0110——平衡二叉树
一个二叉树_每个节点_ 的左右两个子树的高度差的绝对值不超过 1。利用递归的思想对整棵树进行遍历,如果左子树深度减右子树深度大于。给定一个二叉树,判断它是否是高度平衡的二叉树。,那么就不是二叉搜索树,反之则是二叉搜索树。,如果不是,则将返回值的定为。,最终判定最后的返回值是否为。,那么将返回值设定为。原创 2024-01-29 12:15:07 · 621 阅读 · 0 评论 -
力扣0109——有序链表转换二叉搜索树
给定一个单链表的头节点 head ,其中的元素 按升序排序 ,将其转换为高度平衡的二叉搜索树。一个可能的答案是[0,-3,9,-10,null,5],它表示所示的高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差不超过 1。一样的思路,将链表中的元素转存到数组中,之后按照。原创 2024-01-29 12:14:36 · 902 阅读 · 0 评论 -
力扣0108——将有序数组转换为二叉搜索树
直接使用回溯法,基本原理就是二分数组,将左边的值按照二分法赋值给左子树,右边的值按照二分法赋值给右子树。二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。排列,请你将其转换为一棵。原创 2024-01-29 12:14:03 · 938 阅读 · 0 评论 -
力扣0107——二叉树的层序遍历II
(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)和 0102 题解题思路相同,不同的只不过是最后将。原创 2024-01-28 08:39:42 · 396 阅读 · 0 评论 -
力扣0106——从中序与后序遍历构造二叉树
因为后序遍历中最后一个元素为根节点,可以根据根节点将中序分割为左右,之后在根据中序左右子树的节点数量等于后续左右子树节点数量分割后续。是同一棵树的后序遍历,请你构造并返回这颗。是二叉树的中序遍历,原创 2024-01-28 08:39:10 · 438 阅读 · 0 评论 -
力扣0105——从前序与中序遍历序列构造二叉树
遍历前序遍历序列,对于每个值分别创建结点,将每个结点作为上一个结点的左子结点,并将每个结点入栈,直到前序遍历序列的上一个结点值等于中序遍历序列的当前结点值。然后遍历中序遍历序列并依次将栈内的结点出栈,直到栈顶结点值和中序遍历序列的当前结点值不同,此时前序遍历序列的当前值对应的结点为最后一个出栈的结点的右子结点,将当前结点入栈。然后对前序遍历序列和中序遍历序列的其余值继续执行上述操作,直到遍历结束时,二叉树构造完毕。,请构造二叉树并返回其根节点。原创 2024-01-28 08:38:33 · 416 阅读 · 0 评论 -
力扣0104——二叉树的最大深度
遍历每一个子树存下最大值,每遍历到最后的子叶和最大值进行比较。是指从根节点到最远叶子节点的最长路径上的节点数。遍历结束之后的答案即为所得。原创 2024-01-28 08:38:00 · 436 阅读 · 0 评论 -
力扣0103——二叉树的锯齿形层序遍历
(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。和 0102 题类似,不同的是从左到右的时候对。原创 2024-01-28 08:37:04 · 451 阅读 · 0 评论 -
力扣0102——二叉树的层序遍历
由题意得,可以利用队列来进行解题,可获得如下步骤。(即逐层地,从左到右访问所有节点)。循环结束后得答案即为所求。原创 2024-01-28 08:36:29 · 451 阅读 · 0 评论 -
力扣0101——对称二叉树
和第 0100 题相同的解法,利用回溯法求解,不同的是比较左右两个子树。给你一个二叉树的根节点。, 检查它是否轴对称。原创 2024-01-28 08:35:55 · 423 阅读 · 0 评论 -
力扣0100——相同的树
依据题意得,本体需要使用回溯法解题,基本思想就是遍历每个节点之后对比。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。,编写一个函数来检验这两棵树是否相同。给你两棵二叉树的根节点。原创 2024-01-28 08:35:24 · 493 阅读 · 0 评论 -
力扣0099——恢复二叉搜索树
因为二叉搜索树的性质可得,将其中序遍历存储到列表中,数值为单调递增,由此可以得到以下步骤。请在不改变其结构的情况下,恢复这棵树。两个节点的值被错误地交换。给你二叉搜索树的根节点。原创 2024-01-28 08:34:52 · 482 阅读 · 0 评论 -
力扣0098——验证二叉搜索树
由题意得需要使用回溯法解题,使用以下步骤。,判断其是否是一个有效的二叉搜索树。遍历结束之后返回最终回溯的结果即为所得。给你一个二叉树的根节点。原创 2024-01-28 08:34:17 · 497 阅读 · 0 评论 -
力扣0097——交错字符串
的定义与过程如下,其中每个字符串都会被分割成若干。由题意可知此题由动态规划可解。原创 2024-01-28 08:33:44 · 407 阅读 · 0 评论 -
力扣0096——不同的二叉搜索树
返回满足题意的二叉搜索树的种数。依据动态规划解题,进行如下操作。个节点组成且节点值从。原创 2024-01-28 08:33:04 · 951 阅读 · 0 评论 -
力扣0095——不同的二叉搜索树II
最后将答案添加到列表中返回即可得到最终结果。可以分析得到这是一个递归方法解决的问题。,请你生成并返回所有由。个节点组成且节点值从。原创 2024-01-28 08:32:31 · 895 阅读 · 0 评论 -
力扣0094——二叉树的中序遍历
根据中序遍历的基本思想直接写出即可。给定一个二叉树的根节点。原创 2024-01-28 08:32:00 · 419 阅读 · 0 评论 -
力扣0093——复原ip地址
对于每个片段,只有不含有前导零且对应的整数范围在 [回溯结束时,即可得到所有可能的有效 IP 地址。,用以表示一个 IP 地址,返回所有可能的。的数组记录每个片段对应的整数,初始时。正好由四个整数(每个整数位于。之间组成,且不能含有前导。给定一个只包含数字的字符串。],才可能是有效的ip地址。回溯时需要记录起始下标。,这些地址可以通过在。可以使用回溯法来解题。原创 2024-01-28 08:31:27 · 1025 阅读 · 0 评论 -
力扣0092——反转链表II
由于没有提及修改原链表节点,那么可以直接修改值,具体方法如下。当左右指针会面,即可结束,得到最终答案。原创 2024-01-27 13:17:18 · 461 阅读 · 0 评论 -
力扣0091——解码方法
已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。最后将遍历结束的值返回即为所求。的消息通过以下映射进行了。题目数据保证答案肯定是一个。注意,消息不能分组为。原创 2024-01-27 13:16:46 · 506 阅读 · 0 评论 -
力扣0090——子集II
去重操作主要是判断前一个数和当前数字是否相等,如果不相等就继续进行之后的操作,相等则跳出本次回溯。先将数组排序,生成所有的子集,排序之后相同的元素位于相邻的位置,利用这一特点去重。,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。返回的解集中,子集可以按。遍历结束之后,就可以得到最终答案。当遍历到数组中下标为。原创 2024-01-27 13:16:09 · 541 阅读 · 0 评论 -
力扣0089——格雷编码
之后每一次遍历都需要对当前数组添加数据,添加的数据内容为让当前。即每一次循环中,temp都可以取到每一次遍历的位运算数。,依据之后的规律可以发现,需要用到位运算。依题意得,数组的第一个元素必定是。进行按位或运算对的值。原创 2024-01-27 13:15:33 · 503 阅读 · 0 评论 -
力扣0088——合并两个有序数组
最终,合并后数组不应由函数返回,而是存储在数组。个元素表示应合并的元素,后。中,使合并后的数组同样按。原创 2024-01-27 13:14:59 · 483 阅读 · 0 评论 -
力扣0087——扰乱字符串
直接使用动态规划来解题,原始的递归方法中存在大量的重复操作,从而使时间复杂度大幅提高,这时可以使用一个三维数组。其中m的取值范围是[1,k)。这表示切割位置可以在1到k之间选择。使用下面描述的算法可以扰乱字符串。表示当前字符串的长度。原创 2024-01-27 13:14:22 · 471 阅读 · 0 评论 -
力扣0086——分隔链表
来用两个链表进行拼接,如果比目标值小就添加到第一个链表,比目标值大或与目标值相等就添加到第二个链表,最后将两个链表拼接。两个分区中每个节点的初始相对位置。,请你对链表进行分隔,使得所有。给你一个链表的头节点。原创 2024-01-27 13:13:25 · 469 阅读 · 0 评论 -
力扣0085——最大矩形
比如matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]即:将需要讨论的内容缩小,将本来需要讨论的纵坐标转化为每一行的高,之后就可以根据0084的算法来对每一行的内容都取最大面积,之后对结果进行对比,最大的数即为结果。是0084的进阶,可以将它升维转换为二维数组,具体如下。的二维二进制矩阵,找出只包含。的最大矩形,并返回其面积。原创 2024-01-27 13:12:53 · 486 阅读 · 0 评论