![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
Lesliecc96
这个作者很懒,什么都没留下…
展开
-
数据结构刷题总结——(折半判定树+)
1.折半判定树与完全二叉树折半判定树折半判定树的构造过程其实就是对有序列表二分查找的过程,有序列表的中点是折半判定树的根节点,比根节点小的被分到根节点的左子树,比根节点大的被分到根节点的右子树;折半判定树的性质:任意两棵折半查找判定树,若它们的结点个数相同,则它们的结构完全相同任意结点的左右子树中结点个数最多相差1任意结点的左右子树的高度最多相差1任意两个叶子所处的层次最多相差1完全二叉树:如果二叉树的深度为k,除第 k 层外,其它各层 (1~k-1) 的结点数都达到最大个数,第k 层原创 2020-09-26 10:45:23 · 1161 阅读 · 0 评论 -
数据结构刷题总结——知识点归纳1(循环队列)
1.循环队列的相关条件和公式:队尾指针是rear,队头是front,其中QueueSize为循环队列的最大长度1.队空条件:rear==front2.队满条件:(rear+1) %QueueSIze==front3.计算队列长度:(rear-front+QueueSize)%QueueSize4.入队:(rear+1)%QueueSize5.出队:(front+1)%QueueSize...原创 2020-08-10 22:49:27 · 824 阅读 · 0 评论 -
Leetcode刷题笔记——数据结构(队列/栈)
1.打开转盘锁原题思路:状态位一共有4位,前后都可进一步,所以从一个状态到下一个状态有8种可能。在这个基础上,采用广度优先的思想来解题。需要的数据结构是队列,并且还需要一个哈希集合来判断状态是否已经尝试。并且用nll放入队列来隔开每一层的遍历。所以,当取出队列中的第一个节点是,先判断是否位null,如果是,则说明进入下一层,即步数加一,并且判断队列中第一个元素是否是null,如果是的话,在...原创 2020-07-18 20:30:39 · 146 阅读 · 0 评论 -
Queue的三组重复方法:add/offer,element/peek,remove/poll的区别!!
1、add()和offer()区别:add()和offer()都是向队列中添加一个元素。一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,调用 add() 方法就会抛出一个 unchecked 异常,而调用 offer() 方法会返回 false。因此就可以在程序中进行有效的判断!2、poll()和remove()区别:remove() 和 poll() 方法都是从队列中删除第一个元素。如果队列元素为空,调用remove() 的行为与 Collection 接口的版本相似会抛出异常,但是新的原创 2020-07-18 19:20:49 · 949 阅读 · 0 评论 -
Leetcode刷题笔记——数据结构(哈希表应用:哈希键值)
字母异位词分组原题思路1:排序这里需要看每个字符串的本质,将每个字符串转化成字符数组之后,排序,然后便能得到基础顺序,用这个基础顺序为键值,便能循环判断并将字符串分类上代码:class Solution { public List<List<String>> groupAnagrams(String[] strs) { if(strs.length==0) return new ArrayList<>();原创 2020-07-15 22:05:08 · 265 阅读 · 0 评论 -
Leetcode刷题笔记——数据结构(哈希表应用:哈希映射)
1. 同构字符串原题:思路1:可以用哈希映射来做。将字符串s和t同时对比,假设当前遇到的字符分别是c1和c2,看一下哈希映射里面是否有c1,如果有,则看一下c1和c2是否相对应,如果不对应,则返回false。如果哈希映射里面没有c1,则将(c1,c2)加到哈希映射中。注意:对于这道题,我们只需要验证 s - > t 和 t -> s 两个方向即可。如果验证一个方向,是不可以的。举个例子,s = ab, t = cc,如果单看 s -> t ,那么 a -> c, b原创 2020-07-14 22:00:38 · 158 阅读 · 0 评论 -
Leetcode刷题笔记——数据结构(哈希表应用:哈希集合)
1. 两个数组的交集原题:思路: 讲数组准换成哈希集合,使用两个哈希集合来做。定义一个函数来判断两个哈希集合的交集,此处注意,函数的返回值不能单纯的返回交集数组,因为刚开始定义数组的时候并不知道交集的长度,所以数组的长度并不是交集的长度,返回的时候使用Arrays.copyOf()函数处理一下数组,便能直接返回具体的交集。上代码:class Solution { public int[] section(HashSet<Integer> s1, HashSet<Int原创 2020-07-14 16:21:57 · 353 阅读 · 0 评论 -
BST二叉查找树(二叉排序树)java
1.介绍1.1定义二叉查找树(Binary Search Tree),是一种基础数据结构,支持多种动态集合的操作,search,insert,delete,minimum和maxmum1.2二叉树的性质:要么是一个空树要么具备以下性质(1)若左子树非空,则左子树上的所有节点的关键字值均小于根节点的关键字值;(2)若右子树非空,则右子树上的所有节点的关键字值均大于根节点的关键字值;(3)左右子树也分别是一个二叉查找树2.二叉查找树的java实现2.1 二叉查找树节点的定义publi原创 2020-07-12 20:53:10 · 173 阅读 · 0 评论 -
Leetcode刷题笔记——数据结构(哈希表)
设计哈希表原题:思路: 采用双端链表作为哈希表的基础数据结构,来实现哈希表的增删查询。关键点有两个:一个是哈希函数的确定,这里考虑质数,最大程度地避免哈希冲突。确定好哈希函数之后,后续增删查的函数,便是做完哈希之后再进行。确定一个基础地数据结构。这里选择双向链表。需要注意,在进行增加操作的时候,需要查询增加的元素是否存在,因为哈希表不存储重复值。...原创 2020-07-12 16:08:23 · 266 阅读 · 0 评论 -
java数组排序函数
排序算法,基本的高级语言都有一些提供。C语言有qsort()函数,C++有sort()函数,java语言有Arrays类(不是Array)。用这些排序时,都可以写自己的排序规则。Java API对Arrays类的说明是:此类包含用来操作数组(比如排序和搜索)的各种方法。原创 2020-06-08 16:20:14 · 6351 阅读 · 0 评论 -
排序算法的时间复杂度和稳定性
非线性时间比较类排序 :通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。线性时间非比较类排序: 不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。排序方法按照排序过程中所涉及的存储器可分为内排序和外排序两种,其中,待排序记录全部存放在计算机内存中进行排序的过程,称为内排序;而由于待排序记录的数量很大使得排序过程中也需要对外存设备进行访问的排序过程,称为外排序。内、外排序强调的...原创 2020-06-14 21:39:05 · 148 阅读 · 0 评论