数据结构
题目分类
yitahutu79
小李今天打代码了吗?
展开
-
AVL二叉平衡树c++代码
【代码】AVL二叉平衡树c++代码。原创 2023-02-26 20:47:36 · 77 阅读 · 0 评论 -
B树c++代码
【代码】B树c++代码。原创 2023-02-26 20:44:51 · 236 阅读 · 0 评论 -
DFS解最短路径问题
【代码】DFS解最短路径问题。原创 2023-02-26 20:43:50 · 323 阅读 · 0 评论 -
迪杰斯特拉算法(Dijkstra算法)
【代码】迪杰斯特拉算法(Dijkstra算法)原创 2023-02-26 20:42:59 · 86 阅读 · 0 评论 -
弗洛伊德算法(Floyd算法)
【代码】弗洛伊德算法(Floyd算法)原创 2023-02-26 20:40:21 · 62 阅读 · 0 评论 -
哈夫曼树c++代码
【代码】哈夫曼树c++代码。原创 2023-02-26 20:39:19 · 67 阅读 · 0 评论 -
剑指 Offer II 059. 数据流的第 K 大数值
设计一个找到数据流中第 k 大元素的类(class)。注意是排序后的第 k 大元素,不是第 k 个不同的元素。KthLargest(int k, int[] nums) 使用整数 k 和整数流 nums 初始化对象。int add(int val) 将 val 插入数据流 nums 后,返回当前数据流中第 k 大的元素。题目数据保证,在查找第 k 大元素时,数组中至少有 k 个元素。最多调用 add 方法 104 次。原创 2022-11-17 18:36:22 · 109 阅读 · 0 评论 -
160. 相交链表
评测系统将根据这些输入创建链式数据结构,并将两个头节点 headA 和 headB 传递给你的程序。给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果 listA 和 listB 有交点,intersectVal == listA[skipA] == listB[skipB]如果不存在相交节点,这一值为 0。skipA - 在 listA 中(从头节点开始)跳到交叉节点的节点数。skipB - 在 listB 中(从头节点开始)跳到交叉节点的节点数。原创 2022-11-17 18:18:14 · 180 阅读 · 0 评论 -
剑指 Offer II 056. 二叉搜索树中两个节点之和
给定一个二叉搜索树的 根节点 root 和一个整数 k , 请判断该二叉搜索树中是否存在两个节点它们的值之和等于 k。假设二叉搜索树中节点的值均唯一。二叉树的节点个数的范围是 [1, 104].root 为二叉搜索树。原创 2022-11-17 16:43:34 · 109 阅读 · 0 评论 -
剑指 Offer II 055. 二叉搜索树迭代器
BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。可以假设 next() 调用总是有效的,也就是说,当调用 next() 时,BST 的中序遍历中至少存在一个下一个数字。注意,指针初始化为一个不存在于 BST 中的数字,所以对 next() 的首次调用将返回 BST 中的最小元素。否则返回 false。int next()将指针向右移动,然后返回指针处的数字。原创 2022-11-17 16:37:19 · 100 阅读 · 0 评论 -
144. 二叉树的前序遍历
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。树中节点数目在范围 [0, 100] 内。原创 2022-11-17 18:42:31 · 122 阅读 · 0 评论 -
剑指 Offer 55 - I. 二叉树的深度
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。节点总数原创 2022-11-17 18:42:21 · 120 阅读 · 0 评论 -
938. 二叉搜索树的范围和
给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。树中节点数目在范围 [1, 2 * 104] 内。所有 Node.val 互不相同。原创 2022-11-16 21:53:45 · 98 阅读 · 0 评论 -
237. 删除链表中的节点
对于输入,你应该提供整个链表 head 和要给出的节点 node。node 不应该是链表的最后一个节点,而应该是链表中的一个实际节点。链表的所有值都是 唯一的,并且保证给定的节点 node 不是链表中的最后一个节点。有一个单链表的 head,我们想删除它其中的一个节点 node。需要删除的节点 node 是 链表中的节点 ,且 不是末尾节点。我们将构建链表,并将节点传递给你的函数。给定节点的值不应该存在于链表中。输出将是调用你函数后的整个链表。链表中每个节点的值都是 唯一 的。链表中的节点数应该减少 1。原创 2022-11-16 21:04:20 · 117 阅读 · 0 评论 -
1290. 二进制链表转整数
给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。请你返回该链表所表示数字的 十进制值。每个结点的值不是 0 就是 1。链表的结点总数不超过 30。原创 2022-11-16 20:59:28 · 143 阅读 · 0 评论 -
剑指 Offer II 042. 最近请求次数
int ping(int t) 在时间 t 添加一个新请求,其中 t 表示以毫秒为单位的某个时间,并返回过去 3000 毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t] 内发生的请求数。写一个 RecentCounter 类来计算特定时间范围内最近的请求。RecentCounter() 初始化计数器,请求数为 0。保证 每次对 ping 的调用都使用比之前更大的 t 值。保证每次对 ping 调用所使用的 t 值都 严格递增。至多调用 ping 方法 104 次。原创 2022-11-16 20:53:45 · 97 阅读 · 0 评论 -
617. 合并二叉树
想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。给你两棵二叉树: root1 和 root2。两棵树中的节点数目在范围 [0, 2000] 内。注意: 合并过程必须从两个树的根节点开始。返回合并后的二叉树。原创 2022-11-14 20:34:28 · 75 阅读 · 0 评论 -
226. 翻转二叉树
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。树中节点数目范围在 [0, 100] 内。原创 2022-11-14 19:36:25 · 83 阅读 · 0 评论 -
897. 递增顺序搜索树
给你一棵二叉搜索树的 root ,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。树中节点数的取值范围是 [1, 100]原创 2022-11-14 19:31:11 · 99 阅读 · 0 评论 -
47. 全排列 II
给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。原创 2022-11-14 18:09:51 · 121 阅读 · 0 评论 -
1971. 寻找图中是否存在路径
有一个具有 n 个顶点的 双向 图,其中每个顶点标记从 0 到 n - 1(包含 0 和 n - 1)。图中的边用一个二维整数数组 edges 表示,其中 edges[i] = [ui, vi] 表示顶点 ui 和顶点 vi 之间的双向边。每个顶点对由 最多一条 边连接,并且没有顶点存在与自身相连的边。给你数组 edges 和整数 n、source 和 destination,如果从 source 到 destination 存在 有效路径 ,则返回 true,否则返回 false。原创 2022-11-09 22:36:14 · 208 阅读 · 0 评论 -
散列查找.
【代码】散列查找.原创 2022-11-08 22:24:08 · 89 阅读 · 0 评论 -
700. 二叉搜索树中的搜索
你需要在 BST 中找到节点值等于 val 的节点。返回以该节点为根的子树。如果节点不存在,则返回 null。给定二叉搜索树(BST)的根节点 root 和一个整数值 val。数中节点数在 [1, 5000] 范围内。root 是二叉搜索树。原创 2022-11-07 19:15:36 · 80 阅读 · 0 评论 -
c++ 八大排序算法
【代码】c++ 八大排序算法。原创 2022-10-16 14:09:18 · 77 阅读 · 0 评论 -
八大排序算法
【代码】八大排序算法。原创 2022-09-26 19:55:16 · 244 阅读 · 0 评论 -
2. 两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。请你将两个数相加,并以相同形式返回一个表示和的链表。每个链表中的节点数在范围 [1, 100] 内。题目数据保证列表表示的数字不含前导零。转载 2022-09-13 21:44:23 · 88 阅读 · 0 评论 -
857. 雇佣 K 名工人的最低成本
有 n 名工人。 给定两个数组 quality 和 wage ,其中,quality[i] 表示第 i 名工人的工作质量,其最低期望工资为 wage[i] 。现在我们想雇佣 k 名工人组成一个工资组。在雇佣 一组 k 名工人时,我们必须按照下述规则向他们支付工资:对工资组中的每名工人,应当按其工作质量与同组其他工人的工作质量的比例来支付工资。工资组中的每名工人至少应当得到他们的最低期望工资。给定整数 k ,返回 组成满足上述条件的付费群体所需的最小金额 。在实际答案的 10-5 以内的答案将被接受。。示原创 2022-09-11 23:16:04 · 148 阅读 · 0 评论 -
669. 修剪二叉搜索树
给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。可以证明,存在 唯一的答案。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。树中节点数在范围 [1, 104] 内。题目数据保证输入是一棵有效的二叉搜索树。树中每个节点的值都是 唯一 的。原创 2022-09-10 23:17:01 · 71 阅读 · 0 评论 -
652. 寻找重复的子树
对于同一类的重复子树,你只需要返回其中任意一棵的根结点即可。如果两棵树具有相同的结构和相同的结点值,则它们是重复的。给定一棵二叉树 root,返回所有重复的子树。树中的结点数在[1,10^4]范围内。原创 2022-09-05 23:53:27 · 89 阅读 · 0 评论 -
687. 最长同值路径
给定一个二叉树的 root ,返回 最长的路径的长度 ,这个路径中的 每个节点具有相同值。这条路径可以经过也可以不经过根节点。两个节点之间的路径长度 由它们之间的边数表示。树的节点数的范围是 [0, 104]树的深度将不超过 1000。原创 2022-09-02 21:32:11 · 269 阅读 · 0 评论 -
1475. 商品折扣后的最终价格
商店里正在进行促销活动,如果你要买第 i 件商品,那么你可以得到与 prices[j] 相等的折扣,其中 j 是满足 j > i 且 prices[j]原创 2022-09-01 23:32:27 · 102 阅读 · 0 评论 -
946. 验证栈序列
给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false。popped 是 pushed 的一个排列。pushed 的所有元素 互不相同。...原创 2022-08-31 23:43:57 · 86 阅读 · 0 评论 -
998. 最大二叉树 II
root 的右子树将被构建为 Construct([a[i + 1], a[i + 2], …, a[a.length - 1]])。root 的左子树将被构建为 Construct([a[0], a[1], …, a[i - 1]])。请注意,题目没有直接给出 a ,只是给出一个根节点 root = Construct(a)。否则,令 a[i] 作为 a 的最大元素。创建一个值为 a[i] 的根节点 root。最大树 定义:一棵树,并满足:其中每个节点的值都大于其子树中的任何其他值。...原创 2022-08-31 00:06:31 · 102 阅读 · 0 评论 -
1460. 通过翻转子数组使两个数组相等
给你两个长度相同的整数数组 target 和 arr。每一步中,你可以选择 arr 的任意 非空子数组 并将它翻转。你可以执行此过程任意次。与方法一类似,但是判断元素是否相同时,可以将两个数组分别排序,再判断排完序的数组是否相同即可。如果你能让 arr 变得与 target 相同,返回 True;否则,返回 False。方法一:哈希表判断数组元素是否相同。方法二:排序判断数组元素是否相同。...原创 2022-08-28 01:39:05 · 91 阅读 · 0 评论 -
655. 输出二叉树
对于放置在矩阵中的每个节点,设对应位置为 res[r][c] ,将其左子节点放置在 res[r+1][c-2^height-r-1] ,右子节点放置在 res[r+1][c+2^height-r-1]。给你一棵二叉树的根节点 root ,请你构造一个下标从 0 开始、大小为 m x n 的字符串矩阵 res ,用以表示树的 格式化布局。根节点 需要放置在 顶行 的 正中间 ,对应位置为 res[0][(n-1)/2]。输入:root = [1,2,3,null,4]输入:root = [1,2]原创 2022-08-22 22:45:29 · 92 阅读 · 0 评论 -
1224. 最大相等频率
如果删除这个元素后没有剩余元素存在,仍可认为每个数字都具有相同的出现次数(也就是 0 次)。从前缀中 恰好删除一个 元素后,剩下每个数字的出现次数都相同。原创 2022-08-22 22:21:37 · 87 阅读 · 0 评论 -
1302. 层数最深叶子节点的和
给你一棵二叉树的根节点 root ,请你返回 层数最深的叶子节点的和。树中节点数目在范围 [1, 104] 之间。原创 2022-08-17 22:09:58 · 69 阅读 · 0 评论 -
1656. 设计有序流
如果流存储有 id = ptr 的 (id, value) 对,则找出从 id = ptr 开始的 最长 id 连续递增序列 ,并 按顺序 返回与这些 id 关联的值的列表。有 n 个 (id, value) 对,其中 id 是 1 到 n 之间的一个整数,value 是一个字符串。设计一个流,以 任意 顺序获取 n 个 (id, value) 对,并在多次调用时 按 id 递增的顺序 返回一些值。OrderedStream(int n) 构造一个能接收 n 个值的流,并将当前指针 ptr 设为 1。...原创 2022-08-16 23:16:29 · 72 阅读 · 0 评论 -
641. 设计循环双端队列
根据循环队列的定义,队列判空的条件是front=rear ,而队列判满的条件是 front=(rear+1)modcapacity。boolean deleteFront() :从双端队列头部删除一个元素。boolean isEmpty() :若双端队列为空,则返回 true ,否则返回 false。boolean isFull() :若双端队列满了,则返回 true ,否则返回 false。int getFront() ):从双端队列头部获得一个元素。如果双端队列为空,返回 -1。...原创 2022-08-16 00:08:52 · 130 阅读 · 0 评论 -
232. 用栈实现队列
你只能使用标准的栈操作——也就是只有pushtotop,peek/popfromtop,size,和isempty操作是合法的。你能否实现每个操作均摊时间复杂度为O(1)的队列?换句话说,执行n个操作的总时间复杂度为O(n),即使其中一个操作可能花费较长时间。你所使用的语言也许不支持栈。你可以使用list或者deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。假设所有操作都是有效的(例如,一个空的队列不会调用pop或者peek操作)...原创 2022-07-17 17:59:25 · 76 阅读 · 0 评论