
数据结构与算法
我学习数据结构和算法的过程和笔记
jssd
正在学习中
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
(十一) 字典树
文章目录Trie 字典树前缀树一个字典的复杂度Tire的复杂度Tire图示实现代码leetCode 例题211号问题677号问题 Trie 字典树前缀树 一个字典的复杂度 对于一个字典来说, 如果有n个条目 使用树结构, 查询的时间复杂度是O(longn) 如果有100万个条目(2^20) logn 大约为20 Tire的复杂度 查询每个条目的时间复杂度和字典中一共有多少条目无关 时间复杂度为O(...原创 2019-08-22 10:30:12 · 217 阅读 · 0 评论 -
(十) 线段树
线段树 也被称作区间树(Segment Tree) 为什么使用线段树 一类问题 对于有一类问题, 我们关心的时线段(或者区间) 经典的线段树问题: 区间染色 有一面墙, 长度为n, 每次选择一段墙进行染色, m次操作之后, 可以看见多少种颜色 数组解决复杂度 假如我们使用数组解决这个问题, 那么. 每次染色(更新区间), 需要O(n)的操作. 每次查询(查询区间) 需要O(n)的操作 另一类问题...原创 2019-08-18 09:48:30 · 224 阅读 · 0 评论 -
(九) 堆和优先队列
文章目录优先队列什么是优先队列堆的基本结构使用数组存储堆堆的使用操作向堆中添加元素和shiftUp取出堆的最大元素和shiftDownreplace 替换操作heapify 操作堆的实现代码优先队列的实现(使用堆)leetCode例题 优先队列 什么是优先队列 普通队列: 先进先出, 后进后出 优先队列: 出队顺序和入队顺序无关, 和优先级相关 堆的基本结构 二叉堆是一棵二叉树 二叉堆是一棵完全...原创 2019-08-14 09:58:01 · 368 阅读 · 0 评论 -
(八) 映射(Map)
文章目录映射Map基于链表的MapMap接口链表实现Map代码二分搜索树实现MAP代码两种实现方式对比LeetCode 中例题解析349号问题: 两个数组的交集350号问题 映射Map Map是存储(键, 值) 数据对的数据结构 根据键Key寻找值 基于链表的Map Map接口 package pers.jssd.map; /** * @author [email protected] ...原创 2019-08-11 10:03:05 · 412 阅读 · 0 评论 -
(七) 集合
文章目录集合Set接口使用二分搜索树实现集合使用链表实现集合解决一个问题 集合 集合是一个不能存放重复元素的容器 Set接口 public interface Set<E> { void add(E e); void remove(E e); boolean contain(E e); int getSize(); boolean i...原创 2019-08-09 10:09:56 · 110 阅读 · 0 评论 -
(六) 二叉搜索树
文章目录二分搜索树二叉树性质特点二分搜索树特点代码实现 二分搜索树 二叉树 性质 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值; 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值; 任意节点的左、右子树也分别为二叉查找树; 没有键值相等的节点。 特点 和链表一样, 是动态数据结构 二叉树具有唯一根节点 二叉树的每个节点最多有两个孩子 二叉树的每个节点最...原创 2019-08-06 08:53:53 · 132 阅读 · 0 评论 -
(五) 链表和递归
文章目录链表与递归从一个问题开始不使用虚拟头节点使用虚拟头节点递归使用递归数组求和链表具有天然的递归性 链表与递归 从一个问题开始 我们从LeetCode上的一个问题开始对链表和递归进行研究分析学习 在LeetCode上的第203号问题, 是一个链表删除元素的问题, 具体题目如下 Remove all elements from a linked list of integers that ...原创 2019-07-31 09:30:41 · 431 阅读 · 0 评论 -
(四) 数据结构之链表
文章目录链表为什么链表很重要特性数组和链表的对比数组链表链表的实现代码实现复杂度分析使用链表实现栈代码实现与数组栈进行比较使用链表实现队列代码实现测试代码与循环队列, 数组队列进行比较 链表 链表是一种真正意义上的动态线性结构, 因为他的底层是动态的. 而动态数组底层是静态ede, 依靠resize解决固定容量问题 为什么链表很重要 最简单的动态数据结构 更深入的理解引用 更深入的理解递归 ...原创 2019-07-28 10:07:42 · 408 阅读 · 0 评论 -
(三) 数据结构之队列
文章目录队列队列的特点队列接口的实现队列的实现数组队列实现代码测试代码复杂度分析循环队列实现代码复杂度分析两种队列比较 队列 队列的特点 队列也是一种线性结构 相比数组, 队列对应的操作是数组的子集 只能从一端(队尾)添加元素, 只能从另一端(队首)取出元素 队列是一种先进先出的数据结构(先到先得) First In First Out (FIFO) 队列接口的实现 Queue void e...原创 2019-07-24 10:05:44 · 381 阅读 · 0 评论 -
(二) 数据结构之栈
栈 栈是一种线性结构 相比数组, 栈对应的操作是数组的子集 只能从一端添加元素, 也只能从一端取出元素 这一端称为栈顶 栈是一种后进先出的数据结构Last In First Out(LIFO) 栈接口 package pers.jssd.stack; /** * 栈的接口 * * @author jssd * Create 2019-07-23 8:25 */ public int...原创 2019-07-23 09:10:16 · 114 阅读 · 0 评论 -
(一) 数据结构之数组
数组存放 将数据排列成一排存放 注意 数组的下标, 在计算机领域中是从0开始的 数组最大的优点 快速索引 基础使用代码 package com.company; public class Main { public static void main(String[] args) { // 创建数组 int[] scores = new int[10]; ...原创 2019-07-23 09:09:07 · 113 阅读 · 0 评论