刷新
简易BST实现

博主头像 BST,即二叉搜索树,该数据结构规定任意若一个结点存在左子树,那么该结点键必须要大于左子树上所有键;若有右子树,那么该结点键必须要小于右子树上所有键 简单的BST是树形查找里的入门级数据结构,不涉及平衡性调节,只需要简单插入删除,即可,其中删除稍复杂,但是也不难,只需要把三种情况分清即可。简单的BS ...

【LeetCode 114】算法进阶:二叉树展开为链表

博主头像 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。 进阶:你可以使用原地算法(O(1) 额外空间)展开这棵树吗? 需 ...

滑动时间窗口和固定时间窗口的区别

博主头像 滑动时间窗口和固定时间窗口是两种常见的限流算法,它们的主要区别在于如何处理时间窗口和请求的计数方式。 一、固定时间窗口算法 1.定义 固定时间窗口算法将时间划分为多个固定长度的窗口,每个窗口内允许通过的请求数量是固定的。例如,每秒允许100个请求通过。 2.工作原理 时间窗口划分:时间被划分为固定长 ...

2 - SAT

博主头像 2 - SAT 定义 2 - SAT 指的是一种问题形式,通常表述为有 n 个集合,每个集合有且仅有两个元素,且集合之间有对应关系。 举个例子,假设有两个集合 \(A = \left \{a, b \right \}\) , \(B = \left \{c, d \right \}\) ,存在对应关 ...

浅谈Floyd算法

博主头像 弗洛伊德算法是用于求解无负权回路的图的任意一对顶点间最短路径的算法,该算法采用的基本思想是动态规划(转移方程就是cost[i][j] = cost[i][k] + cost[k][j] < cost[i][j] ? cost[i][k] + cost[k][j] : cost[i][j]) 算法步骤 ...

【LeetCode 230】算法:二叉搜索树中第 K 小的元素

博主头像 题目:给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。 进阶:如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化算法? 算法设计: 在二叉搜索树(BST)中,中序遍历可以按照从小到大的顺序 ...

【LeetCode 108】算法:将有序数组转换为二叉搜索树

博主头像 题目:给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。 平衡二叉搜索树(Balanced Binary Search Tree,常简称 BBST 或 AVL 树)的核心特点: 首先是:二叉搜索树 左子树所有节点值 < 根值 < 右子树所有节点值,中序遍 ...

多核及GPU程序设计1简介

1 简介 计算机设计的趋势及其对软件开发的影响。 Flynn 分类法 评估多核/并行性能、加速比和效率的基本工具。 测量和报告性能的正确实验程序。 阿姆达尔定律和古斯塔夫森-巴塞尔定律,并运用它们来预测并行程序的性能。 1.1 多核时代 自 20 世纪 80 年代以来,数字计算机一直是我们经历的许多 ...

【LeetCode 102】算法:二叉树的层序遍历

博主头像 题目:给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 算法思路: 用 Queue 存放当前层的节点。 每轮循环处理 一整层,把节点值收集到 List。 依次把左右子节点入队。 复杂度: 时间复杂度:O(n) —— 每个节点恰好访问一次 空间复杂度: ...

【LeetCode 543】算法:二叉树的直径

博主头像 题目: 给你一棵二叉树的根节点,返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 算法思路: 直径 = 左子树最大深度 + 右子树最大深度(经过当前节点)。 对每个节点都算 ...

给定二叉树的根节点 root,判断它是否 轴对称(镜像对称)

博主头像 题目:给你一个二叉树的根节点 root , 检查它是否轴对称。 这个题的思路是,把「轴对称」转化为「两棵子树互为镜像」的问题: 递归比较:左子树的左孩子 vs 右子树的右孩子,左子树的右孩子 vs 右子树的左孩子。 迭代法:可用队列/栈每次成对弹出节点比较。 复杂度: 时间复杂度:O(n),每个节点 ...

二叉树的中序遍历:递归法和迭代法

博主头像 题目:给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 对于中序遍历,两种最常用的方法是递归法和迭代法。下面分别给出这两种方法最简洁的 Java 实现,任选其一即可。 中序遍历顺序:左子树 → 根节点 → 右子树 递归法最直观,而迭代法用栈避免递归深度问题。 复杂度: 时间:O(n) ...

浅谈拓扑排序与Kahn算法

博主头像 拓扑排序的结果序列反应了有向图中前顶点的前驱后继关系。所以,手算拓扑排序很简单,每次检查入度为0的顶点,删除从此顶点出发的边,将该顶点加入拓扑排序序列即可。 Kahn算法其实就是模拟这个过程,不过其核心的优化在于将采用BSF的方式来进行,同时维护一个入度数组,每次加入一个顶点就更新入度数组,并且若入 ...

<1234···16>