题目:给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 根据给定的先序遍历(preorder)和中序遍历(inorder)数组来重建二叉树是一个经典的算法问题。先序遍历的第一个元 ...
https://www.luogu.com.cn/problem/P1948 https://www.acwing.com/problem/content/description/342/ 方法一 分层图 每次选择从当前点前往另一点时要不要选择付费, 最多选择 \(k\) 次不付费, 所以就是 \( ...
BST,即二叉搜索树,该数据结构规定任意若一个结点存在左子树,那么该结点键必须要大于左子树上所有键;若有右子树,那么该结点键必须要小于右子树上所有键 简单的BST是树形查找里的入门级数据结构,不涉及平衡性调节,只需要简单插入删除,即可,其中删除稍复杂,但是也不难,只需要把三种情况分清即可。简单的BS ...
给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。 进阶:你可以使用原地算法(O(1) 额外空间)展开这棵树吗? 需 ...
最努力的活着 数学 #高精度 题目 思路 注意到本题给的\(1\leq n\leq 1e 12\),因此需要使用\(\_\_int 128\)(最大可以存\(2^{128}\))来提高精度 贪心地想,为了使得最后的答案最大,每次删去的数必然要尽可能小,因此每次删去最小的\(\frac{len}{w} ...
滑动时间窗口和固定时间窗口是两种常见的限流算法,它们的主要区别在于如何处理时间窗口和请求的计数方式。 一、固定时间窗口算法 1.定义 固定时间窗口算法将时间划分为多个固定长度的窗口,每个窗口内允许通过的请求数量是固定的。例如,每秒允许100个请求通过。 2.工作原理 时间窗口划分:时间被划分为固定长 ...
伤害冷却比 数学 题目 思路 令\(a=\frac{K}{N}\),则有\(f(x)=x\left( \left\lfloor \frac{a}{x} \right\rfloor +1\right)\) 大致画出图像,可得下图 若要求区间\([L,R]\)上的最大值,则需要求出\(f(R)\)与红线 ...
2 - SAT 定义 2 - SAT 指的是一种问题形式,通常表述为有 n 个集合,每个集合有且仅有两个元素,且集合之间有对应关系。 举个例子,假设有两个集合 \(A = \left \{a, b \right \}\) , \(B = \left \{c, d \right \}\) ,存在对应关 ...
弗洛伊德算法是用于求解无负权回路的图的任意一对顶点间最短路径的算法,该算法采用的基本思想是动态规划(转移方程就是cost[i][j] = cost[i][k] + cost[k][j] < cost[i][j] ? cost[i][k] + cost[k][j] : cost[i][j]) 算法步骤 ...
题目:给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。 进阶:如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化算法? 算法设计: 在二叉搜索树(BST)中,中序遍历可以按照从小到大的顺序 ...
题目:给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。 平衡二叉搜索树(Balanced Binary Search Tree,常简称 BBST 或 AVL 树)的核心特点: 首先是:二叉搜索树 左子树所有节点值 < 根值 < 右子树所有节点值,中序遍 ...
1 简介 计算机设计的趋势及其对软件开发的影响。 Flynn 分类法 评估多核/并行性能、加速比和效率的基本工具。 测量和报告性能的正确实验程序。 阿姆达尔定律和古斯塔夫森-巴塞尔定律,并运用它们来预测并行程序的性能。 1.1 多核时代 自 20 世纪 80 年代以来,数字计算机一直是我们经历的许多 ...
题目:给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 算法思路: 用 Queue 存放当前层的节点。 每轮循环处理 一整层,把节点值收集到 List。 依次把左右子节点入队。 复杂度: 时间复杂度:O(n) —— 每个节点恰好访问一次 空间复杂度: ...
题目: 给你一棵二叉树的根节点,返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 算法思路: 直径 = 左子树最大深度 + 右子树最大深度(经过当前节点)。 对每个节点都算 ...
题目:给你一个二叉树的根节点 root , 检查它是否轴对称。 这个题的思路是,把「轴对称」转化为「两棵子树互为镜像」的问题: 递归比较:左子树的左孩子 vs 右子树的右孩子,左子树的右孩子 vs 右子树的左孩子。 迭代法:可用队列/栈每次成对弹出节点比较。 复杂度: 时间复杂度:O(n),每个节点 ...
题目:给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 对于中序遍历,两种最常用的方法是递归法和迭代法。下面分别给出这两种方法最简洁的 Java 实现,任选其一即可。 中序遍历顺序:左子树 → 根节点 → 右子树 递归法最直观,而迭代法用栈避免递归深度问题。 复杂度: 时间:O(n) ...
拓扑排序的结果序列反应了有向图中前顶点的前驱后继关系。所以,手算拓扑排序很简单,每次检查入度为0的顶点,删除从此顶点出发的边,将该顶点加入拓扑排序序列即可。 Kahn算法其实就是模拟这个过程,不过其核心的优化在于将采用BSF的方式来进行,同时维护一个入度数组,每次加入一个顶点就更新入度数组,并且若入 ...
深入剖析 LRU 缓存机制的核心实现,本文巧妙融合双向链表与哈希表,解锁时间复杂度为 O (1) 的高效缓存管理。从数据结构选择到代码实现,多方面解读 LRU 缓存的设计原理及其高效性。 ...
本文使用了三种排序方法——归并排序、快速排序、计数排序,解决对于升序排序链表的算法问题,详细介绍了三种方法的算法步骤及代码实现、复杂度分析。其中归并排序算法的空间复杂度为 O (1),时间复杂度为 O (n log n),实现了算法优化。 ...