摘要:
一、堆的引入 现在我们想专门设计一种数据结构,用来存放整数,要求提供3个接口: 添加元素 获取最大值(或最小值) 删除最大值(或最小值) 有一种最优的数据结构就是堆。 时间复杂度:获取最大值的:O(1)、删除最大值O(log n)、添加元素O(log n) 二、堆的相关概念 堆(Heap是一种树状的 阅读全文
posted @ 2023-12-06 20:54
Ac_c0mpany丶
阅读(24)
评论(0)
推荐(0)
摘要:
哈希表(Hash Table) 一、引言 TreeMap分析 添加、删除、搜索的时间复杂度:O(n) 特点: key必须具备可比较性 元素的分布是有顺序的 但是在实际应用中,很多时候的需求中 Map中存储的元素不需要讲究顺序 Map中的Key不需要具备可比较性 不考虑顺序、不考虑Key的可比较性,M 阅读全文
posted @ 2023-12-06 20:52
Ac_c0mpany丶
阅读(42)
评论(0)
推荐(0)
摘要:
映射(Map) Map在有些变成语言中也叫作字典(比如在Python中) Map的每一个Key是唯一的,Value可以不是唯一的 Map中的每一个Key对应一个Value 一、Map的接口设计 public interface Map<K, V> { int size; boolean isEmpt 阅读全文
posted @ 2023-12-06 20:50
Ac_c0mpany丶
阅读(31)
评论(0)
推荐(0)
摘要:
集合(Set) 一、集合的特点 集合的特点: 不存放重复的元素 常用于去重 二、集合的实现方式 思考:集合的内部实现是否能直接利用以前学过的数据结构? 动态数组 链表 二叉搜索树(AVL树、红黑树) 三、集合的接口实现 public interface Set<E> { int size(); bo 阅读全文
posted @ 2023-12-06 20:49
Ac_c0mpany丶
阅读(32)
评论(0)
推荐(0)
摘要:
红黑树(Red Black Tree) 红黑树性质 null节点只是一种记号,并不存储真实数据,也不是红黑树中的实际节点,其作用是方便程序员在设计和编程时理解节点的操作规则,在实际应用中并没有实际意义。 红黑树的等价变换 红黑树和4阶B树(2-3-4树)具有等价性 红黑树是平衡二叉搜索树,而B树是平 阅读全文
posted @ 2023-12-06 20:48
Ac_c0mpany丶
阅读(20)
评论(0)
推荐(0)
摘要:
B树(B-tree、B-树) B树是一种平衡的多路搜索树,多用于文件系统,数据库的实现。 B树的特点 1个节点可以存储超过2个元素、可以拥有超过2个子节点 拥有平衡二叉搜索树的一些性质 平衡、每个节点的所有子树高度一致 比较矮 m阶B树的性质(m>=2) m阶B树一个节点最多拥有m-1个元素,最多有 阅读全文
posted @ 2023-12-06 20:46
Ac_c0mpany丶
阅读(59)
评论(0)
推荐(0)
摘要:
AVL树 AVL树是在二叉搜索树上加上自平衡的功能。 AVL树是最早发明的自平衡二叉搜索树之一。 AVL取名于两位发明者的名字:G.M.Aelson-Velsky和E.M.Landis。 1.1 平衡因子 平衡因子(Balance Factor):某节点的左右子树高度差 平衡因子 = 左子树高度 - 阅读全文
posted @ 2023-12-06 20:42
Ac_c0mpany丶
阅读(41)
评论(0)
推荐(0)
摘要:
平衡二叉搜索树(Balanced Binary Search Tree) 1.1 二叉搜索树存在的问题 添加、删除节点时,都可能导致二叉搜索树退化成链表。为了防止二叉搜索树退化成链表,让添加、删除搜索的复杂度维持在O(logn),提出平衡的概念。 1.2 平衡(Balance) 平衡:当节点数量固定 阅读全文
posted @ 2023-12-06 20:38
Ac_c0mpany丶
阅读(41)
评论(0)
推荐(0)
摘要:
二叉搜索树(Binary Search Tree) 使用二叉搜索树,可以使添加、删除、搜索的最坏时间复杂度优化至O(logn) 一、BST的相关概念 二叉搜索树是二叉树的一种,又被称为二叉查找树、二叉排序树,是应用非常广泛的一种二叉树,简称BST。 任意一个节点的值都大于其左子树所有节点的值 任意一 阅读全文
posted @ 2023-12-06 20:35
Ac_c0mpany丶
阅读(102)
评论(0)
推荐(0)
摘要:
二叉树 一、树的基本概念 节点、根节点、父节点、子节点、兄弟节点 一棵树可以没有任何节点,称为空树 一棵树可以只有一个节点,也就是只有根节点 子树、左子树、右子树 节点的度:子树的个数 树的度:所有节点度中的最大值 叶子节点:度为0的节点 非叶子节点:度不为0的节点 层数:根节点在第1层,根节点的子 阅读全文
posted @ 2023-12-06 20:25
Ac_c0mpany丶
阅读(51)
评论(0)
推荐(0)
摘要:
队列(Queue) 一、队列的基本概念 队列是一种特殊的线性表,只能在头尾两端进行操作 队尾(rear):只能从队尾添加元素,一般叫做enQueue,入队 队头(front):只能从队头移除元素,一般叫做deQueue,出队 先进先出的原则,FIRST IN FIRST OUT,FIFO 二、队列的 阅读全文
posted @ 2023-12-06 20:21
Ac_c0mpany丶
阅读(72)
评论(0)
推荐(0)
摘要:
栈(Stack) 一、栈的相关概念 栈是一种特殊的线性表,只能在一端进行操作 往栈中添加元素的操作,一般叫做push,入栈。 往栈中移除元素的操作,一般叫做pop,出栈(只能移除栈顶元素,也叫作:弹栈) 先进后出的原则:Last IN FIRST OUT,LIFO。 二、栈的接口设计 int siz 阅读全文
posted @ 2023-12-06 20:18
Ac_c0mpany丶
阅读(31)
评论(0)
推荐(0)
摘要:
链表 链表是一种链式存储的线性表,所有元素的内存地址不一定是连续的。 单向链表 一、单向链表的设计 1.1、不带虚拟头结点 public class LinkedList<E> { // 链表的节点数量 private int size; // 链表的头结点 private Node<E> firs 阅读全文
posted @ 2023-12-06 20:14
Ac_c0mpany丶
阅读(39)
评论(0)
推荐(0)
摘要:
动态数组 一、动态数组接口设计 // 这里可以写一个List接口,然后ArrayList类去实现这个接口,实现接口中的方法。但为了方便起见,直接将这些方法写在类中。 // 这些方法暂时不添加泛型、和正确的返回值 public class ArrayList { // 动态数组的长度 private 阅读全文
posted @ 2023-12-06 20:06
Ac_c0mpany丶
阅读(51)
评论(0)
推荐(0)
摘要:
时空复杂度 一、时间复杂度 时间复杂度:估算程序指令的执行次数(执行时间) 1.1 大O表示法(Big O) 一般用大O表示法来描述复杂度,它表示的是数据规模n对应的复杂度 它并不是用于来真实代表算法的执行时间,它是用来表示代码执行时间的增长变化趋势的 忽略常数、系数、低阶 9 —— O(1) 2 阅读全文
posted @ 2023-12-06 20:00
Ac_c0mpany丶
阅读(78)
评论(0)
推荐(0)
摘要:
题目描述 思路一:开辟两个数组,时间复杂度O(m + n) 开辟两个数组用来记录哪些行、哪些列需要置为零。 这样时间复杂度为O(m + n)。 思路二: 原地算法:不适用额外空间或者说常数级空间来实现算法。 类似于使用set保存每行每列是否需要置零, 方法一:对应思路一 class Solution 阅读全文
posted @ 2023-12-06 11:39
Ac_c0mpany丶
阅读(21)
评论(0)
推荐(0)

浙公网安备 33010602011771号