
数据结构
小小的香辛料
天落九重影,君便晓黎明炫目。
展开
-
【代码随想录day26】动态规划:01背包理论基础(滚动数组)
有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。,求解将哪些物品装入背包里物品价值总和最大。原创 2023-09-08 11:35:52 · 511 阅读 · 0 评论 -
【代码随想录day25】动态规划:01背包理论基础
有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。,求解将哪些物品装入背包里物品价值总和最大。原创 2023-09-07 13:14:32 · 467 阅读 · 0 评论 -
【代码随想录day24】不同的二叉搜索树
给你一个整数n,求恰由n个节点组成且节点值从1到n互不相同的有多少种?返回满足题意的二叉搜索树的种数。原创 2023-09-06 23:15:06 · 709 阅读 · 0 评论 -
【代码随想录day24】整数拆分
给定一个正整数n,将其拆分为k个的和(k >= 2),并使这些整数的乘积最大化。返回你可以获得的最大乘积。原创 2023-09-06 10:16:28 · 202 阅读 · 0 评论 -
【代码随想录day22】爬楼梯
假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?n = 22有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶n = 33有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶。原创 2023-08-16 23:26:26 · 484 阅读 · 0 评论 -
【代码随想录day22】斐波那契数
(通常用F(n)表示)形成的序列称为。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(n) = F(n - 1) + F(n - 2),其中 n > 1给定n,请计算F(n)。原创 2023-08-16 23:11:22 · 228 阅读 · 0 评论 -
【滴滴提前批】移掉 K 位数字
给你一个以字符串表示的非负整数num和一个整数k,移除这个数中的k位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。"1219"移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。"200"移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。"0"从原数字移除所有的数字,剩余为空就是 0。num。原创 2023-08-16 22:39:00 · 227 阅读 · 0 评论 -
【百度提前批】股票的最大利润
假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?5在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。0在这种情况下, 没有交易完成, 所以最大利润为 0。原创 2023-08-16 22:33:30 · 338 阅读 · 0 评论 -
【代码随想录day21】二叉搜索树中的插入操作
给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。返回插入后二叉搜索树的根节点。输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。你可以返回 任意有效的结果。原创 2023-07-27 17:46:09 · 359 阅读 · 0 评论 -
【代码随想录day21】二叉搜索树的最近公共祖先
解题的关键是知道自顶向低递归遍历,第一次遇到root在p和q的区间中时,则root就是p和q的最近公共祖先节点。原创 2023-07-27 17:08:16 · 345 阅读 · 0 评论 -
【代码随想录day21】二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。原创 2023-07-27 15:03:36 · 230 阅读 · 0 评论 -
【代码随想录day21】二叉搜索树中的众数
给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。如果树中有不止一个众数,可以按 任意顺序 返回。假定 BST 满足如下定义:结点左子树中所含节点的值 小于等于 当前节点的值结点右子树中所含节点的值 大于等于 当前节点的值左子树和右子树都是二叉搜索树。原创 2023-07-27 11:16:22 · 294 阅读 · 0 评论 -
【代码随想录day20】二叉搜索树的最小绝对差
给你一个二叉搜索树的根节点root,返回。差值是一个正数,其数值等于两值之差的绝对值。原创 2023-07-26 17:03:55 · 225 阅读 · 0 评论 -
【代码随想录day20】验证二叉搜索树
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。原创 2023-07-26 16:24:18 · 206 阅读 · 0 评论 -
【代码随想录day20】二叉搜索树中的搜索
给定二叉搜索树(BST)的根节点 root 和一个整数值 val。你需要在 BST 中找到节点值等于 val 的节点。返回以该节点为根的子树。如果节点不存在,则返回 null。原创 2023-07-26 15:14:36 · 201 阅读 · 0 评论 -
【代码随想录day20】合并二叉树
给你两棵二叉树: root1 和 root2。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。返回合并后的二叉树。注意: 合并过程必须从两个树的根节点开始。示例 1:输入:root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]原创 2023-07-26 14:03:07 · 196 阅读 · 0 评论 -
【代码随想录day20】最大二叉树
给定一个不重复的整数数组 nums。最大二叉树 可以用下面的算法从 nums 递归地构建:创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。返回 nums 构建的 最大二叉树。原创 2023-07-26 11:30:51 · 263 阅读 · 0 评论 -
【代码随想录day19】从中序与后序遍历序列构造二叉树
区别是root需要从postorder列表的尾部取。原创 2023-07-25 17:41:02 · 262 阅读 · 0 评论 -
【代码随想录day19】从前序与中序遍历序列构造二叉树
找到新树的节点在中序中的索引。取出后序节点创建新树的节点。继续递归建立整颗新树。原创 2023-07-25 17:39:51 · 335 阅读 · 0 评论 -
【代码随想录day19】路径总和
如果这样的节点存在,就说明找到了一条从根节点到叶子节点的路径且路径和为target。如果走到空节点都没找到,说明当前路径不是我们要找的,返回False。最后只要左子树或者右子树中的任意一个为True都算成功找到了。,而我最开始以为只要里面有相加为target的就行,导致了一些错误。其实整体思路比较简单,对于每一个节点,我们判断。一定要认真审题,题目说的是。原创 2023-07-25 15:19:14 · 153 阅读 · 0 评论 -
【代码随想录day19】找树左下角的值
这题最直观的方法就是用层序遍历,记录一下每一层的左边第一个节点,这样整个层序遍历一遍就能找到最后一行最左边的节点。这里要注意最左边的节点不一定是父节点的左子节点!如果最后一行没有左子节点,那就只能找第一个右子节点了。递归法需要找到最大深度的节点对应的左孩子值(如果没有就找右孩子值)。其实用前中后序遍历都可以,但是要保证递归左子树一定在递归右子树前面,这样才能得到每一层的最左边节点了,如果调换一下顺序,找到的应该是最后一层最右边的节点。实际上,这题用层序遍历非常的高效,而且容易理解,非常推荐!原创 2023-07-25 14:48:10 · 253 阅读 · 0 评论 -
【代码随想录day18】左叶子之和
给定二叉树的根节点root,返回所有左叶子之和。输入: root = [3,9,20,null,null,15,7]输出: 24解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24示例 2:输入: root = [1]输出: 0。原创 2023-07-24 15:28:55 · 115 阅读 · 0 评论 -
【代码随想录day18】二叉树的所有路径
给你一个二叉树的根节点root,按,返回所有从根节点到叶子节点的路径。是指没有子节点的节点。原创 2023-07-24 14:26:46 · 131 阅读 · 0 评论 -
【代码随想录17】平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。原创 2023-07-23 20:01:36 · 332 阅读 · 0 评论 -
【代码随想录day16】完全二叉树的节点个数
给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。原创 2023-07-21 10:32:27 · 145 阅读 · 0 评论 -
【代码随想录day15】二叉树的最小深度
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。叶子节点是指没有子节点的节点。输入:root = [3,9,20,null,null,15,7]输出:2示例 2:输入:root = [2,null,3,null,4,null,5,null,6]输出:5提示:树中节点数的范围在 [0, 105] 内。原创 2023-07-20 19:07:33 · 122 阅读 · 0 评论 -
【代码随想录day15】二叉树的最大深度
这道题我同样不认为他是“简单”题,虽然代码简单,但是思路非常值得学习。顺便写一下N叉树的最大深度。原创 2023-07-20 18:36:49 · 159 阅读 · 0 评论 -
【代码随想录day15】对称二叉树
,然后在迭代的过程中不断的从容器中弹出一对节点,判断它俩是否相同,如果是则继续迭代直到把所有节点全部迭代完返回True,如果中间有不匹配的则直接返回False。这个分类成简单题我是不认同的,递归逻辑虽然不复杂,但是第一次想也不好想出来的。其实这个用栈和队列都可以,整个过程和。有点像,思路是用容器同时存储两个“原创 2023-07-20 15:35:01 · 127 阅读 · 0 评论 -
【代码随想录day15】N 叉树的前序遍历
和二叉树的前序遍历一样,我这里就写了迭代的方式。原创 2023-07-20 14:43:56 · 121 阅读 · 0 评论 -
【代码随想录day15】翻转二叉树
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例 2:输入:root = [2,1,3]输出:[2,3,1]示例 3:输入:root = []输出:[]提示:树中节点数目范围在 [0, 100] 内。原创 2023-07-20 14:14:08 · 118 阅读 · 0 评论 -
【代码随想录day15】二叉树的层序遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历。(即逐层地,从左到右访问所有节点)。示例 1:输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]示例 2:输入:root = [1]输出:[[1]]示例 3:输入:root = []输出:[]提示:树中节点数目在范围 [0, 2000] 内。原创 2023-07-20 11:22:48 · 97 阅读 · 0 评论 -
【代码随想录day14】二叉树的三种非递归遍历方式
【代码】【代码随想录day14】二叉树的三种非递归遍历方式。原创 2023-07-19 22:25:10 · 133 阅读 · 0 评论 -
【代码随想录13】前 K 个高频元素
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。原创 2023-07-18 15:08:22 · 296 阅读 · 0 评论 -
【代码随想录day12】单调队列-滑动窗口最大值
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值。原创 2023-07-17 17:09:12 · 305 阅读 · 0 评论 -
【代码随想录day11】逆波兰表达式求值
给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。注意:有效的算符为 '+'、'-'、'*' 和 '/'。每个操作数(运算对象)都可以是一个整数或者另一个表达式。两个整数之间的除法总是 向零截断。表达式中不含除零运算。输入是一个根据逆波兰表示法表示的算术表达式。答案及所有中间计算结果可以用 32 位 整数表示。示例 1:输入:tokens = ["2","1","+","3","*"]输出:9。原创 2023-07-16 12:45:50 · 275 阅读 · 0 评论 -
【代码随想录day11】删除字符串中的所有相邻重复项
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:"abbaca"输出:"ca"解释:例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。原创 2023-07-16 11:44:18 · 381 阅读 · 0 评论 -
【代码随想录day10】有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。示例 1:输入:s = "()"输出:true。原创 2023-07-14 14:06:46 · 248 阅读 · 0 评论 -
【代码随想录day10】KMP-重复的子字符串
给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。示例 1:输入: s = "abab"输出: true解释: 可由子串 "ab" 重复两次构成。示例 2:输入: s = "aba"输出: false。原创 2023-07-14 10:49:56 · 149 阅读 · 0 评论 -
【代码随想录day9】KMP算法-找出字符串中第一个匹配项的下标
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1。示例 1:输入:haystack = "sadbutsad", needle = "sad"输出:0解释:"sad" 在下标 0 和 6 处匹配。第一个匹配项的下标是 0 ,所以返回 0。原创 2023-07-13 17:52:41 · 275 阅读 · 0 评论 -
【代码随想录day9】左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = "abcdefg", k = 2输出: "cdefgab"原创 2023-07-13 15:19:59 · 205 阅读 · 0 评论