数据结构
KongJetLin
一步一脚印
展开
-
慕课网liuyubobobo老师课程学习笔记---part13:哈希表
1、哈希表基础 参考LeetCode第387号问题:给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。提示:你可以假定该字符串只包含小写字母。 这种方法的时间复杂度是O(n)public int firstUniqChar(String s) { int[] freq = new int[26]; //先将字符串中各个字母出现的频率存储到freq数组(数组下标对应字母在ASCII表中26个小写字母中的位置) ..原创 2020-07-02 23:49:02 · 459 阅读 · 0 评论 -
慕课网liuyubobobo老师课程学习笔记---part12:红黑树
1、红黑树与2-3树2、树的绝对平衡性 2-3树在添加结点的时候,新的结点永远不会添加到空的位置,而只会我们最后找到的叶子结点做融合。1)对于根结点是4结点的时候(4结点一个结点内有3个元素,2-3树每个结点只能有1或2个元素),我们可以直接将4结点分为一颗子树(由3个2结点组成的树,即每个结点只有一个元素)。2)对于叶子结点来说,如果该叶子结点因为添加一个元素,从3结点变成4结点,我们先将该结点拆分为由3个2结点组成的树,再将这颗树的根结点与其父节点融合成为一个3结点(如果父..原创 2020-07-01 22:48:41 · 494 阅读 · 0 评论 -
慕课网liuyubobobo老师课程学习笔记---part11:AVL
1、平衡二叉树和AVL树2、旋转操作的基本原理 下面介绍的是AVL树实现自平衡的机制!3、LR与RL的不平衡情况4、AVL树的删除 AVL树中添加元素可能导致整棵树变得不平衡,删除某个元素也是一样的,可能使得整棵树变得不平衡! AVL树相应的代码如下:package com.lkj;import java.util.ArrayList;/**AVL平衡二叉树其实就是在之前的二分搜索树的基础上实现的,其实就是在二分搜索树的..原创 2020-06-30 22:31:12 · 620 阅读 · 2 评论 -
慕课网liuyubobobo老师课程学习笔记---part10:并查集
1、什么是并查集2、Quick Find原创 2020-06-24 23:45:57 · 304 阅读 · 0 评论 -
慕课网liuyubobobo老师课程学习笔记---part9:字典树Trie
LeetCode第208、211、677号问题,实现Trie,参考本文 Trie 的实现。 Trie 的实现package com.lkj;import java.util.TreeMap;/**我们这里不设置Trie的泛型,因为我们默认使用Trie来处理字符串,只需要存储char字符即可。 事实上Trie可以处理各种语言的字符,那样需要我们设置泛型等重新定义Trie。 */public class Trie{//---------------------...原创 2020-06-23 02:26:57 · 416 阅读 · 0 评论 -
慕课网liuyubobobo老师课程学习笔记---part8:线段树
1、线段树介绍2、线段树的基础表示3、创建线段树、线段树区间查询 线段树实现的代码如下:package com.lkj;public class SegmentTree<E>{ /* 使用一个数组表示区间. 首先,用户可能要获取区间内某一个的元素,或者获取区间的某一个属性,我们在线段树中创建数组,作为区间数组的的副本,用于给出区间数组的某些属性; 其次,我们想将data数组内的元素(arr数组区间传递进来的)组..原创 2020-05-13 19:28:17 · 324 阅读 · 0 评论 -
慕课网liuyubobobo老师课程学习笔记---part7:优先队列和堆
1、什么是优先队列2、堆的基础表示 二叉堆的2个性质: 下面介绍二叉堆的实现技巧:使用数组存储二叉堆(当然,也可以像前面的二分搜索树那样,通过左右指针的指定某个结点的左右孩子)3、二叉堆的各类操作 代码如下:package com.lkj;//同样,二叉堆也是树,它里面的结点的值也必须要具有比较性,因为我们规定每一个结点的值必须大于等于它的孩子结...原创 2020-04-30 02:12:13 · 455 阅读 · 0 评论 -
慕课网liuyubobobo老师课程学习笔记---part6:集合与映射
1、集合基础以及基于二分搜索树的集合实现 集合与映射(Set and Map)是高层的数据结构,什么是高层的数据结构?例如之前的 栈、队列,这些数据结构的底层实现可以是多种多样的,可以是动态数组,也可以是链表,这样的数据结构就是高层的数据结构。目前为止:底层的数据结构:数组、链表、二分搜索树高层的数据结构:栈、队列、集合与映射 二分搜索树实现集合(很简单,直接使用二分搜索树的...原创 2020-04-28 00:06:50 · 556 阅读 · 0 评论 -
慕课网liuyubobobo老师课程学习笔记---part5:二分搜索树
1、树结构的介绍 见视频1解析。2、二分搜索树的基础 二叉树的介绍如下: 二分搜索树的介绍 注意,我们二分搜索树存储的元素必须具有可比较性,为了是存储的元素对象具有可比较性,元素类必须实现Comparable<E>接口,并复写接口的 compareTo(Object obj)方法以实现比较性。关于前序、中序、后序遍历的总结如下,注意理解...原创 2020-04-27 00:17:43 · 470 阅读 · 1 评论 -
慕课网liuyubobobo老师课程学习笔记---part4:链表和递归(递归很重要!)
1、LeetCode第203题解析移除链表元素 题目描述:删除链表中等于给定值 val 的所有节点。示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5 代码如下:package com.lkj.Problem203;//第203:移除链表元素/* ...原创 2020-04-14 02:15:10 · 404 阅读 · 0 评论 -
慕课网liuyubobobo老师课程学习笔记---part3:链表
1、链表介绍 对于前面学到的三种线性数据结构,底层依然是静态数组实现。(动态数组是从用户角度看,从开发者角度看数组是静态) 链表是真正的动态数据结构,也是最简单的动态数据结构,学习链表有助于理解引用(java中是引用,C++中是指针,与内存相关。java不需要手动管理内存,而C++需要。),有助于更深入的理解递归(虽然我们可以使用循环的方式对链表进行操作,链表本身也具有递归结构的性质...原创 2020-04-05 20:59:12 · 492 阅读 · 0 评论 -
慕课网liuyubobobo老师课程学习笔记---part2 :栈和队列
1、栈 栈也是一种线性结构,相比数组,栈对应的操作是数组的子集。栈只能从一端添加元素,也只能从一端取出元素,这一端称为栈顶。 栈是一种后进先出的数据结构——Last In First Out(LIFO),在计算机的世界里,栈拥有着不可思议的作用。栈的应用 1)无处不在的Undo操作(撤销); 2)程序调用的系统栈。(子过程子逻辑的调用)栈的实现 这部分参考StackT...原创 2020-03-31 00:23:54 · 595 阅读 · 0 评论 -
慕课网liuyubobobo老师课程学习笔记---part1: chapter1(介绍)+chapter2(数组)
1、数据结构基础 数据结构研究的是数据如何在计算机中进行组织和存储,使得我们可以高效的获取数据或者修改数据。 数据结构的分类 课程设置2、数组 ...原创 2020-03-27 22:12:46 · 961 阅读 · 9 评论