![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
宁皇说java
大专文学专业在读,干过工地和外卖,觉得还是编程香,目前研究方向:分布式微服务,检索引擎,数据仓库
展开
-
leetcode236. 二叉树的最近公共祖先
二叉树,LeetCode,二叉树的最近公共祖先原创 2022-08-31 11:56:09 · 239 阅读 · 0 评论 -
LeetCode-前 K 个高频元素(优先队列)
前言:啥是优先队列?优先队列的实现原理题目:思路:常规的解法就是将值存放并记录在hash表中,并且最好按照value进行排序但是TreeMap是无法进行队value进行排序的,此时就需要借助优先队列,来实现对map中的value进行排序class Solution { public int[] topKFrequent(int[] nums, int k) { HashMap<Integer,Integer> map=new HashMap<原创 2022-03-31 13:16:54 · 846 阅读 · 0 评论 -
蓝桥训练营-大臣的旅费(java)(树中权值和最大的通路)
题目:问题描述很久以前,T王国空前繁荣。为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。同时,如果不重复经过大城市,从首都到达每个大城市的方案都是唯一的。J是T国重要大臣,他巡查于各大城市之间,体察民情。所以,从一个城市马不停蹄地到另一个城市成了J最常做的事情。他有一个钱袋,用于存放往来城市间的路费。聪明的J发现,如果不在某个城市停下来修整,在连续行原创 2022-01-11 08:17:25 · 113 阅读 · 0 评论 -
leetcode839. 相似字符串组(并查集)
题目思路:一个相似字符组的条件是数组中至少有一个字符和你相似,相当于具有关联关系,这样数组中的相关关系可以形成一段连通的关系网这样我们就可以使用并查集去合并这些有关系的字符,最后返回连通组的个数,即为相似字符组的个数判断是否为相似字符,只需逐位比较,当不同的数量超过2个时(大于等于2)两个字符不相似(相当也相似)==================== 下面简单介绍一下并查集 ======================================并查集三步曲● 定义一个大小为结点总原创 2021-11-23 16:19:06 · 518 阅读 · 0 评论 -
leetcode 697. 数组的度
题目思路:遍历并统计每种数据出现的大小,并记录当数第一次出现的位置和最后出现的位置这里若用hash数组需要定义 hash[5000][3] 第一列存储出现的次数,第二列和第三列存储第一次和最后一次出现的位置而且遍历起来,但hash数组需要开的空间太大会造成空间上的浪费我们可以使用Map<Integer,int[]> 来替代多行多列的数组。注意:不要将hash思想限制在两列,hash映射可以映射多列数据如果当前数是最大于(不等于)最大值,直接返回长度,等于的情况再取最小原创 2021-11-22 09:53:40 · 190 阅读 · 0 评论 -
leetcode232. 用栈实现队列
思路思路: 我们只需要理解队列的存储结构,出队入队的方式即可创建两个指针分别用于出队入队pop时,返回i位的数,并且指针i后移动peek时,只需返回i位的数push时,将x赋值给j位的数,j后移动empty时,只需判断队列头的元素是否为0代码class MyQueue { int[] stack; int i=0,j=0; public MyQueue() { stack=new int[100]; } public..原创 2021-11-21 11:04:21 · 53 阅读 · 0 评论 -
leetcode203. 移除链表元素
移除链表元素给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。示例 1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]示例 2:输入:head = [], val = 1输出:[]示例 3:输入:head = [7,7,7,7], val = 7输出:[]思路:简单题,当前结点为val就移动head结点,并将temp结点重新指向head,不是.原创 2021-06-05 17:41:01 · 77 阅读 · 0 评论 -
力扣(leetcode)链表相交
相交链表给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Intersected at ‘8’解释:相交节点的值为 8 (注意,如果两个.原创 2021-06-04 11:16:07 · 142 阅读 · 0 评论 -
leetcod525. 连续数组
这个月的题都是hash优化525. 连续数组给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。示例 1:输入: nums = [0,1]输出: 2说明: [0, 1] 是具有相同数量0和1的最长连续子数组。示例 2:输入: nums = [0,1,0]输出: 2说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。提示:1 <= nums.length <= 105nums[i] 不是原创 2021-06-03 10:14:17 · 187 阅读 · 0 评论 -
leetcode-692. 前K个高频单词
给一非空的单词列表,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。示例 1:输入: [“i”, “love”, “leetcode”, “i”, “love”, “coding”], k = 2输出: [“i”, “love”]解析: “i” 和 “love” 为出现次数最多的两个单词,均为2次。注意,按字母顺序 “i” 在 “love” 之前。示例 2:输入: [“the”, “day”, “is”, “sunny原创 2021-05-21 12:18:03 · 114 阅读 · 0 评论 -
leetcode.993. 二叉树的堂兄弟节点
二叉树的堂兄弟节点在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。示例 1:输入:root = [1,2,3,4], x = 4, y = 3输出:false示例 2:输入:root = [1,2.原创 2021-05-17 21:26:45 · 82 阅读 · 0 评论 -
完全二叉树的权值-JavaA
给定一棵包含N 个节点的完全二叉树,树上每个节点都有一个权值,按从上到下、从左到右的顺序依次是A1, A2, AN,如下图所示:现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点权值之和最大?如果有多个深度的权值和同为最大,请你输出其中最小的深度。注:根的深度是1。输入第一行包含一个整数N。第二行包含N 个整数A1, A2, AN对于所有评测用例,1<=N<=100000, -100000<=Ai<=100000。输出输出一个整数代表答案。样例输入原创 2021-04-16 21:08:39 · 862 阅读 · 1 评论 -
堆排序
树结构实际应用堆排序思路说明图解思路代码从局部到整体思路说明堆排序其实是选择排序的一种,构建大顶堆后,将选择元素放在堆顶再放在数组末尾堆排序基于顺序化二叉树进行调整大顶堆:非叶子节点都比其子节点要大小顶堆:非叶子节点都比其子节点要小当前节点为i ,左子节点:2i+1,右子节点:2i+2。将树从上自下,从左至右,标记下标,第一个非叶子节点下标为length/2-1;图解思路局部构建整体构建选择插入代码从局部到整体注意:每次构建大顶堆是局部构建的,并不是一部构建出的1.原创 2021-04-12 12:43:16 · 181 阅读 · 0 评论 -
线索化二叉树
线索化二叉树先看看顺序存储二叉树什么是线索化二叉树先看看顺序存储二叉树顺序存储二叉树说明:从数据存储来看,数组存储方式和树存储方式相同,树也可以转化为数组现在我们需要将二叉树以数组方式存储,(基于完全二叉树的特点)理解顺序存储二叉树的特点!!!!!例如:第二个(从0开始)节点元素的左子节点对应其在数组的下标为5,对应图中的第5未,值为6按照其下标进行创建和遍历利用的是完全二叉树的性质package x;public class ArraBinaryTree { public s原创 2021-03-28 21:45:12 · 111 阅读 · 2 评论 -
深度优先搜索(DFS)1/31
图的深度优先搜索(Depth First Search) 。个人观点:该算法类似于树的先序查找,理解好树的先序查找更容易理解,难度一般,关键是学会图解,理解回溯递归过程。1)深度优先遍历,从初始访问结点出发,初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接结点, 可以这样理解:每次都在访问完当前结点后首先访问当前结点的第一个邻接结点。2)我们可以看到,这样的访问策略是优先往纵向挖掘深入,而不是对一个结点的所有邻接原创 2021-01-31 23:11:00 · 132 阅读 · 0 评论