数据结构与算法
HX_2022
这个作者很懒,什么都没留下…
展开
-
十大排序算法总结及其代码实现
1、算法分类2、时间复杂度分析3、基本的排序算法3.1、冒泡排序public class BubbleSort1 { public static void main(String[]args){ int array[]={5,4,2,6,8,1}; System.out.println("排序前的数组数字排列顺序为:"); for(int i=0;i<array.length;i++){ System.out.原创 2020-12-28 16:47:44 · 178 阅读 · 0 评论 -
浅谈红黑树
红黑树1、概念红黑树(Red Black Tree)也属于平衡二叉树,是一种自平衡的二叉查找树,红黑树主要用于存储有序的数据,它的时间复杂度是O(logn),非常高效。除了符合二叉查找树的基本特性外,它还具有下列的附加特性:①节点是红色或黑色。②根节点是黑色。③每个叶子节点都是黑色的空节点(NIL节点)。(保证原有的节点的度为2)④每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)⑤从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。2、红黑树和A原创 2020-12-07 11:19:07 · 224 阅读 · 0 评论 -
平衡二叉树图解以及代码实现
平衡二叉树平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1;左右两个子树都是一棵平衡二叉树。是为了解决二叉查找树查找节点在最坏的情况下,该二叉树有可能退化成一个链表。AVL树除了满足二叉查找树的性质之外,AVL树的特性如下:AVL树的左右子树的高度差别小于等于1。AVL树的左右子树也是AVL树。平衡因子:定义:某结点的左子树与右子树的高度原创 2020-12-06 17:08:43 · 803 阅读 · 0 评论 -
二叉排序树图解和代码实现
二叉排序树二叉排序树(Binary sort tree,BST),又叫二叉查找树、二叉搜索树,或者是一棵空树;或者是具有下列性质的二叉树: (1)若它的左子树不为空,则左子树上所有节点的值均小于它的根节点的值; (2)若它的右子树不为空,则右子树上所有节点的值均大于它的根节点的值; (3)它的左、右子树也分别为二叉排序树。(注:二叉排序树中没有值相同的节点)二叉排序树属于一种动态查找表,关于二叉排序树节点的代码实现:public class TreeNode { p原创 2020-12-06 15:37:07 · 1389 阅读 · 0 评论 -
leetcode第216场周赛
第216场周赛5605. 检查两个字符串数组是否相等流程题,按部就班。。。。class Solution { public boolean arrayStringsAreEqual(String[] word1, String[] word2) { String s1=""; String s2=""; for(String word:word1){ s1+=word; } for(Str原创 2020-11-22 18:21:55 · 148 阅读 · 0 评论 -
图论算法之最短路径(Dijkstra、Floyd、Bellman-ford和SPFA)
图论算法之最短路径(Dijkstra、Floyd、Bellman-ford和SPFA)1、图论最短路径概述图论算法为了求解一个顶点到另一个顶点的最短路径,即如果从图中某一顶点(称为源点)到达另一顶点(称为终点)的路径可能不止一条,如何找到一条路径,使得沿此路径各边上的权值总和(即从源点到终点的距离)达到最小,这条路径称为最短路径(shortestpath)。最短路径有很多特殊的情况,包括有向图还是无向图,有没有负权边等。通常解决图论中最短路径问题的算法有Dijkstra、Floyd、Bellman-f原创 2020-11-18 15:10:21 · 12709 阅读 · 0 评论 -
leetcode第39场双周赛
第39场双周赛5550. 拆炸弹暴力流程题:class Solution { public int[] decrypt(int[] code, int k) { int n=code.length; int []res=new int [n]; if(k==0){ for(int i=0;i<n;i++){ res[i]=0; } }else原创 2020-11-15 21:28:34 · 180 阅读 · 0 评论 -
leetcode第215场周赛
第215场周赛 京东&力扣联合主办5601. 设计有序流class OrderedStream { private String []nums; private int ptr=1; public OrderedStream(int n) { nums=new String [n+2]; } public List<String> insert(int id, String value) { Lis原创 2020-11-15 21:23:10 · 132 阅读 · 0 评论 -
图论算法之拓扑排序
拓扑排序总结:1、AOV网一个较大的工程往往被划分成许多子工程,我们把这些子工程称作活动。在整个工程中,有些子工程(活动)必须在其它有关子工程完成之后才能开始,也就是说,一个子工程的开始是以它的所有前序子工程的结束为先决条件的,但有些子工程没有先决条件,可以安排在任何时间开始。为了形象地反映出整个工程中各个子工程(活动)之间的先后关系,可用一个有向图来表示,图中的顶点代表活动(子工程),图中的有向边代表活动的先后关系,即有向边的起点的活动是终点活动的前序活动,只有当起点活动完成之后,其终点活动才能进行。原创 2020-11-13 21:25:37 · 644 阅读 · 0 评论 -
哈夫曼树(Huffman Tree)和哈夫曼编码
哈夫曼树和哈夫曼编码1、哈夫曼树(Huffman Tree)哈夫曼树又称最优二叉树。是一种带权路径长度最短的二叉树。它的定义如下:假设有n个权值{w1,w2,w3,w4…,wn},构造一棵有n个节点的二叉树,若树的带权路径最小,则这颗树称作哈夫曼树。这里面涉及到几个概念,我们由一棵哈夫曼树来解释。路径与路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1;树的路径长度原创 2020-11-12 16:37:06 · 669 阅读 · 0 评论 -
图论算法之最小生成树(Prim、Kruskal)
图论算法之最小生成树(Krim、Kruskal)1、图论基础图论 (Graph theory) 是数学的一个分支,图是图论的主要研究对象。 图 (Graph) 是由若干给定的顶点及连接两顶点的边所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系。顶点用于代表事物,连接两顶点的边则用于表示两个事物间具有这种关系。图的相关名词解释:图的表示法:G=(V(G),E(G)),其中V(G)表示点集,E(G)表示边集;度:与一个顶点v关联的边的条数称作该顶点的度,如果是有向图的话,分原创 2020-11-11 21:20:11 · 718 阅读 · 2 评论 -
实现字典树(前缀树、Trie树)并详解其应用
今天看到一个比较好的数据结构,字典树,做一下记录,以供自己后期复习和读者朋友的参考。1、定义字典树又称单词查找树、前缀树、Trie树等,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。平衡树和哈希表也可以在字符串数据集中搜索单词,尽管哈希表可以在O(1)的时间内寻找键值,但是无法做到以下操作:①找到具有用一前原创 2020-11-10 22:15:34 · 241 阅读 · 0 评论 -
LeetCode第214场周赛
收获满满的周赛:感受还是大佬们太强了……简单回顾一下第一题送分,第二题流程题,第三题视数据量应该使用二分法+贪心,第四题,套模板:树状数组或者线段树。1646. 获取生成数组中的最大值class Solution { public int getMaximumGenerated(int n) { if(n==0){ return 0; } if(n==1){ return 1; }原创 2020-11-09 22:33:22 · 238 阅读 · 0 评论 -
Leetcode第213场周赛
第一次参加周赛,被虐的体无完肤,如果以后周末没有其他任务的话,一定会每周坚持找虐的。。。。。class Solution { public boolean canFormArray(int[] arr, int[][] pieces) { int n=arr.length; int m=pieces.length; for(int i=0;i<n;){ //遍历arr的数组中的值 int cur=arr[i];原创 2020-11-02 10:53:18 · 131 阅读 · 0 评论 -
并查集
一文带你掌握并查集原创 2020-07-18 00:10:53 · 225 阅读 · 0 评论