随笔分类 - 数据结构
摘要:1 字符串排序 有多篇文章输入,每篇文章分为标题行和正文行,每篇文章输入时标题和正文各占一行。需要统计所有文章中出现的热词并输出topN的热词。title中的词权重为3,text中权重为1,所有文章中的热词权重相加即为该词的总权重。排序方法为: 两词权重大的排前面 若权重一样,则在title中最先出
阅读全文
摘要:给定一个整数数组和一个滑动窗口大小,求在这个窗口的滑动过程中,每个时刻其包含的最大值。 示例: 输入:nums = [1,3,-1,-3,5,3,6,7], k = 3 输出:[3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值 [1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3
阅读全文
摘要:给定建筑物的起止位置和高度,返回建筑物轮廓(天际线)的拐点。 示例: 输入:buildings = [[2,9,10],[3,7,15],[5,12,12],[15,20,10],[19,24,8]] 输出:[[2,10],[3,15],[7,12],[12,0],[15,10],[20,8],[2
阅读全文
摘要:请你设计并实现一个满足 LRU(最近最少使用)缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity):以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key):如果关键字 key 存在于缓存中,则返回关键字的值,否则返
阅读全文
摘要:树可以看成是一个连通且 无环 的 无向 图。 给定往一棵 n 个节点 (节点值 1~n) 的树中添加一条边后的图。添加的边的两个顶点包含在 1 到 n 中间,且这条附加的边不属于树中已存在的边。图的信息记录于长度为 n 的二维数组 edges ,edges[i] = [, ] 表
阅读全文
摘要:给定 N 个课程和这些课程的前置必修课,求可以一次性上完所有课的顺序。 输入是一个正整数,表示课程数量;以及一个二维矩阵,表示所有的有向边(如 [1,0] 表示上课程 1 之前必须先上课程 0)。输出是一个一维数组,表示拓扑排序结果。 示例: 输入:numCourses = 4, prerequis
阅读全文
摘要:存在一个 无向图 ,图中有 n 个节点。其中每个节点都有一个介于 0 到 n - 1 之间的唯一编号。给你一个二维数组 graph ,其中 graph[u] 是一个节点数组,由节点 u 的邻接节点组成。形式上,对于 graph[u] 中的每个 v ,都存在一条位于节点 u 和节点 v 之间的无向边。
阅读全文
摘要:Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。 请你实现 Trie 类的 快速插入单词、查找单词、查找单词前缀功能: Trie() 初始化前缀树对象 void insert(Stri
阅读全文
摘要:给你二叉搜索树的根节点 root,同时给定最小边界 low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在 [low, high] 中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。 可以证明,存在 唯一的答案 。 所以结果应当返
阅读全文
摘要:给你二叉搜索树的根节点 root ,该树中 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下,恢复这棵树。 **进阶:**使用 O(n) 空间复杂度的解法很容易实现。你能想出一个只使用 O(1) 空间的解决方案吗? 示例1: 输入:root = [3,1,4,null,null,2] 输出:
阅读全文
摘要:输入一个二叉树,输出一个数组,为二叉树前序遍历的结果。 示例: 输入:root = [1,null,2,3] 输出:[1,2,3] 二叉树遍历题目: 114. 二叉树的前序遍历 94. 二叉树的中序遍历 145. 二叉树的后序遍历 102. 二叉树的层序遍历 主要参考:https://leetcod
阅读全文
摘要:给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例: 输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7] 输出: [3
阅读全文
摘要:给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 以内的答案可以被接受。 示例: 输入:root = [3,9,20,null,null,15,7] 输出:[3.00000,14.50000,11.00000] 解释:第 0 层的平均值
阅读全文
摘要:给出二叉树的根节点 root,树上每个节点都有一个不同的值。 如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合)。 返回森林中的每棵树。你可以按任意顺序组织答案。 示例: 输入:root = [1,2,3,4,5,6,7], to_del
阅读全文
摘要:给你一个二叉树的根节点 root , 检查它是否轴对称。 示例: 输入:root = [1,2,2,3,4,4,3] 输出:true 判断一个树是否对称 等价于 判断左右子树是否镜像对称。因此,该问题可以转化为:两个树在什么情况下互为镜像? 如果同时满足下面的条件,两个树互为镜像: 它们的两个根结点
阅读全文
摘要:给定一个二叉树的根节点 root ,和一个整数 sum ,求该二叉树里节点值之和等于 sum 的 路径 的数目。 路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。 示例: 输入:root = [10,5,-3,3,2,null,11,3,-2,nu
阅读全文
摘要:给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 注意:两结点之间的路径长度是以它们之间边的数目表示。 示例: 输入: 输出:3 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3] 一条路径的长度为该路径经过
阅读全文
摘要:给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例1: 输入:root = [1,2,2,3,3,null,null,4,4] 输出:false 示例2: 输入:root = [] 输出:true
阅读全文
摘要:输入是一个二叉树,输出是一个整数,表示该树的最大深度。 二叉树的深度为根节点到最远叶子节点(没有子节点的节点)的最长路径上的节点数。 示例: 给定二叉树 [3,9,20,null,null,15,7] 返回它的最大深度 3 。 相关知识 来源:https://leetcode.cn/problems
阅读全文
摘要:给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 示例1: 输入:head = [1,2,2,1] 输出:true 示例2: 输入:head = [1] 输出
阅读全文