Java数据结构与算法
用Java语言进行数据结构和算法的学习
LanceMai
始终对这个世界保持敬畏
展开
-
红黑树
原创 2020-08-16 17:51:30 · 167 阅读 · 0 评论 -
堆和优先队列
优先队列和堆普通队列:first in first out优先队列:出队顺序与入队顺序无关;和优先级有关优先队列的底层实现可以是普通线性结构,如;链表,也可以是顺序线性结构,如数组,也可以由 堆 来实现堆的基本结构二叉堆 Binary Heap从 1 开始的数组从 0 开始的数组Sift up 上浮sift down 下沉基于堆的优先队列实现Java标准库中的优先队列可以实现Comparator接口,可以自原创 2020-08-10 17:29:26 · 158 阅读 · 0 评论 -
集合set与映射map
集合和映射都是高级的数据结构他们都是由动态数据结构(链表,二叉树)底层实现的集合一般元素不能重复(多重集合允许元素重复)链表实现链表中不允许重复元素出现即可实现集合但是链表的平均复杂度是O(n),所以集合复杂度是O(n2) (假设集合中有n个元素),因此效率很低Java中的HashSet是结合哈希表和链表实现的集合,性能很好二分搜索树实现二分搜索树可以自然而然地实现集合二分搜索树的优势在于每次遍历都是一分为二,一般可以少遍历很多元素,因此平均复杂度是O(log n)因此.原创 2020-08-09 17:13:09 · 184 阅读 · 0 评论 -
二分搜索树
树结构使用树结构存储数据,会很高效分类:二分搜索树(Binary Search Tree)平衡二叉树:AVL;红黑树堆;并查集线段树;Trie(字典树,前缀树)二叉树前序遍历、中序遍历、后序遍历如何直接在得到一个二叉树时直接得到遍历结果前序遍历中序遍历后序遍历层序遍历使用的是队列作为底层实现广度优先遍历删除节点(难点)package com.lancemai.binarysearchtree;import java.util.Ill原创 2020-08-08 15:33:18 · 155 阅读 · 0 评论 -
递归与链表
递归与链表LeetCode题库中第203题递归基础与递归的宏观语意数组求和的递归算法用递归实现链表递归运行的机制LeetCode题库中第203题// Definition for singly-linked list.public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } // 链表节点的构造方法(自己构造测试用例) public L原创 2020-07-26 17:35:49 · 476 阅读 · 0 评论 -
链表
链表原创 2020-07-24 17:15:26 · 84 阅读 · 0 评论 -
栈和队列
栈和队列1. 栈2. 队列1. 栈应用一:import com.lancemai.Array.Array;public class ArrayStack<E> implements Stack<E> { Array<E> array; // 成员变量 public ArrayStack(int capacity) { array = new Array<>(capacity); }原创 2020-07-22 18:06:15 · 121 阅读 · 0 评论 -
数组
数组数组封装泛型数组最大的优点:快速查询数组最好应用于 索引有语意 的情况但并非所有有语意的索引都适用于数组数组也可以处理索引没有语意的情况数组封装基于java的数组,二次封装属于我们的数组类(动态数组)public class Array { private int[] data; private int size; // 无参构造方法,默认数组容量 public Array() { this(10); } //原创 2020-07-21 15:32:48 · 97 阅读 · 0 评论 -
算法复杂度分析
一般从以下维度来评估算法的优劣正确性、可读性、健壮性(对不合理输入的反应能力)时间复杂度(time complexity):程序执行时间空间复杂度(space complexity):占用的存储空间大O表示法忽略常数、系数、低阶:9 -> O(1)2n+1 -> O(n)3n^2 - 1 -> O(n^2)对数阶一般省略底数...原创 2020-07-19 16:29:52 · 319 阅读 · 0 评论 -
第1章 数据结构与算法概述
数据结构与算法概述原创 2020-07-17 16:38:25 · 225 阅读 · 1 评论 -
第2章 稀疏数组与队列
稀疏数组与队列原创 2020-07-17 17:59:52 · 153 阅读 · 0 评论