数据结构
文章平均质量分 80
红颜莫知己
这个作者很懒,什么都没留下…
展开
-
前k个高频单词
692. 前K个高频单词给一非空的单词列表,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。示例 1:输入: [“i”, “love”, “leetcode”, “i”, “love”, “coding”], k = 2输出: [“i”, “love”]解析: “i” 和 “love” 为出现次数最多的两个单词,均为2次。注意,按字母顺序 “i” 在 “love” 之前。示例 2:输入: [“the”, “da原创 2021-05-20 10:39:56 · 322 阅读 · 1 评论 -
二叉树的堂兄弟节点
目录993. 二叉树的堂兄弟节点思路分析DFSBFS993. 二叉树的堂兄弟节点在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。示例 1:输入:root = [1,2,3,4], x = 4, y =原创 2021-05-17 09:09:06 · 1203 阅读 · 8 评论 -
字典树(java)
目录什么是字典树字典树的基本性质如下:字典树的应用字典树的实现插入(insert)java代码:查询完整代码:什么是字典树字典树(又叫单词查找树、TrieTree),是一种树形结构,典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串,如01字典树)。主要思想是利用字符串的公共前缀来节约存储空间。很好地利用了串的公共前缀,节约了存储空间。字典树主要包含两种操作,插入和查找。其实很好理解,小时候我们都用过英语字典,前面有个目录,目录里的内容就是字典树字典树的基本性质如下:根节点没有字原创 2021-05-16 11:03:20 · 1269 阅读 · 1 评论 -
剑指offer 03.数组中重复的数字
目录找出数组中重复的数字。思路分析方法一:Setjava代码:复杂度分析时间复杂度空间复杂度方法二 :原地交换java代码找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3思路分析方法一:Set看到重复两个字我们一定要想起HashSet这个数据结构,它是基于Ha原创 2021-05-15 19:41:14 · 131 阅读 · 1 评论 -
砖墙(HashMap)
554. 砖墙你的面前有一堵矩形的、由 n 行砖块组成的砖墙。这些砖块高度相同(也就是一个单位高)但是宽度不同。每一行砖块的宽度之和应该相等。你现在要画一条 自顶向下 的、穿过 最少 砖块的垂线。如果你画的线只是从砖块的边缘经过,就不算穿过这块砖。你不能沿着墙的两个垂直边缘之一画线,这样显然是没有穿过一块砖的。给你一个二维数组 wall ,该数组包含这堵墙的相关信息。其中,wall[i] 是一个代表从左至右每块砖的宽度的数组。你需要找出怎样画才能使这条线 穿过的砖块数量最少 ,并且返回 穿过的砖块数量原创 2021-05-02 11:11:49 · 155 阅读 · 0 评论 -
员工的重要性(DFS和BFS)
690. 员工的重要性给定一个保存员工信息的数据结构,它包含了员工 唯一的 id ,重要度 和 直系下属的 id 。比如,员工 1 是员工 2 的领导,员工 2 是员工 3 的领导。他们相应的重要度为 15 , 10 , 5 。那么员工 1 的数据结构是 [1, 15, [2]] ,员工 2的 数据结构是 [2, 10, [3]] ,员工 3 的数据结构是 [3, 5, []] 。注意虽然员工 3 也是员工 1 的一个下属,但是由于 并不是直系 下属,因此没有体现在员工 1 的数据结构中。现在输入一个原创 2021-05-01 22:06:25 · 674 阅读 · 0 评论 -
完全二叉树的节点数
目录Leecode.222完全二叉树的节点数思路分析层序遍历_迭代递归_二叉树的遍历迭代_二叉树的遍历Leecode.222完全二叉树的节点数给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。示例 1:输入:root = [1,2,3,4,5,6]输出:6示例 2:输入:root原创 2021-04-20 10:02:39 · 2807 阅读 · 0 评论 -
树的最大深度和最小深度(java)
目录树的深度和高度二叉树的最大高度思路分析递归迭代N叉树的最大深度LeetCode.559.N叉树的最大深度思路分析递归迭代树的深度和高度什么是树的深度?什么是树的高度,一张图让你弄明白!我们暂时以二叉树为例。二叉树的最大高度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。思路分析我们在做每一道关于二叉树的题时,都要原创 2021-04-20 09:13:53 · 2425 阅读 · 0 评论 -
对称二叉树
226. 翻转二叉树翻转一棵二叉树。示例:输入:输出:这是一道非常简单题,就是对二叉树遍历的考察,但在这里有一个问题,那就是我们使用哪种遍历方式呢?很多人程序过了,却不知道自己使用的是哪种遍历方式,递归...原创 2021-04-15 10:03:32 · 866 阅读 · 0 评论 -
十大排序图示详解(java代码)
目录一、冒泡排序原理图解java代码:二、插入排序原理图解java代码:三、选择排序原理图解Java代码:四、快速排序原理图解Java代码:五、归并排序原理图解java代码:六、堆排序七、桶排序原理图解java代码:八、基数排序一、冒泡排序原理冒泡排序就是将相邻的两个元素进行比较,如果前者大于后者(反之降序),则交换,反之不交换。图解第一轮将最大值放在最后一位,第二轮将次大值防在倒数第二位java代码:public void bubblingSort(int[] nums) {原创 2021-04-13 19:31:51 · 294 阅读 · 2 评论 -
二叉树的层序遍历
二叉树的层序遍历我们回归正题,什么是二叉树的层序遍历,就是将二叉树分层,每一层从左至右输出,如图所示输出结果为乍眼一看和广度优先搜索(BFS)没什么区别,但是层序遍历要求输出结果与BFS不同,层序遍历要求我们区分每一层,就是返回一个二维数组。LeetCode102. 二叉树的层序遍历给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7],返回其层序遍历结果:我这道题中我们需要用到队列原创 2021-04-07 16:48:30 · 1726 阅读 · 8 评论 -
二叉树的中序遍历
目录简述LeetCode94. 二叉树的中序遍历递归迭代法简述二叉树的中序遍历的遍历顺序就是左根右那到底什么是左根右我们从A节点看;A节点的左节点为B,右节点为C,根据 “左根右” ,做节点存在,我们看向左节点B;此时我们将B节点看成根节点,它的左节点不存在右节点为E,那么根据“左右根”,“左”不存在,所以不输出,那么就该输出“根”,即B;再输出“右”,即E;我们再将E看为根节点,根据“左根右”,它的左节点不存在,不输出“左”,“根”存在,输出根E,“右”不存在,不输出。A的“左”输出完成了原创 2021-04-06 16:45:20 · 1549 阅读 · 0 评论 -
二叉树的前序遍历
前言在讲二叉树的遍历之前,我们首先讲一下递归这个东西,很多人,写递归函数靠运气,或者说不只是写递归函数,写任何代码都靠运气,听天由命,有时候自己都不知道自己写的是什么就过了,这样写代码肯定是不行的。之所以我们会有这种情况是因为,我们在写一个代码的时候没有一个明确的方法体,我们在这里以递归为例子。递归我们在写递归算法的时候主要有三要素,每次写递归按照这三要素写,一般不会出错。1.确定递归函数的参数和返回值: 确认哪些参数是递归过程中需要处理的,那么就在递归函数里加上这个参数,返回值每次递归的返回值一原创 2021-04-06 09:48:06 · 6085 阅读 · 2 评论 -
树的简述
树1满二叉树满二叉树,如果一棵树的只有度为0和1的节点,并且度为0的节点在同一层上,则这棵树为满二叉树。这课数为满二叉树,可以说是深度为k,有(2^k )- 1节点的二叉树2完全二叉树完全二叉树的定义如下:在完全二叉树中,除了最底层没有被填满,其余每层节点数都达到最大值,并且最底层的节点都集中在该层的最左边若干位置。若最底层为h,则最底层的节点数为1~2h。我们举个例子:一定要记住是最左边的若干位置,我们可以仔细想一下,优先队列就是一个堆,堆就是一个完全二叉树,同时保证父子节点的顺序关系。原创 2021-04-02 09:31:15 · 322 阅读 · 0 评论