数据结构与算法
一大碗恩希玛
这个作者很懒,什么都没留下…
展开
-
Trie树
class Trie { private Node root; /** Initialize your data structure here. */ public Trie() { this.root = new Node(); } /** Inserts a word into the trie. */ public...原创 2020-03-21 09:50:23 · 152 阅读 · 0 评论 -
BitMap的简单实现 & 布隆过滤器介绍
BitMapBitMap是一种用时间换空间的思想, 用一个bit位标志int值是否存在, 这样, 40亿int值判重的情况下, 需要申请的内存为 4^9 / 8 * 10 ^9 = 500MB private byte[] bits; private int cap; public BitMap(int cap) { this.cap = cap; ...原创 2020-03-21 09:48:00 · 588 阅读 · 0 评论 -
憨批min栈
Abstract讨论了min栈变形题, 获取栈中第二小的数, 的思路Min栈常规思路双栈stackA, stackB变形题求第二小的数case1 第一小和第二小可以重复本质上还是单调栈, push时, 针对min栈, 如果小于等于栈顶就加入pop时, 如果和min栈顶相等, 则min栈pop public void push(int x) { stack.pus...原创 2020-03-17 18:57:07 · 161 阅读 · 0 评论 -
24: 反转链表
输入一链表头节点,输出反转后的链表头节点原创 2020-02-11 16:49:16 · 104 阅读 · 0 评论 -
二叉树的非递归遍历
文章目录preOrderinOrderpostOrder层序遍历preOrder循环访问并将左孩子入栈遇到 p = null , 要出栈, 并访问右孩子 public static void preOrder(TreeNode p) { Stack<TreeNode> stack = new Stack<>(); while (p != null ...原创 2019-07-13 17:46:58 · 179 阅读 · 0 评论 -
二分查找及四种变体
文章目录二分查找查找第一个值等于 val 的元素查找最后一个值等于 val 的元素查找第一个值大于等于 val 的元素查找第一个小于等于val的元素二分查找 public static int binarySearch(int[] arr, int val) { int left = 0; int right = arr.length - 1; whi...原创 2019-07-09 21:26:45 · 330 阅读 · 0 评论 -
Java实现AVL树
文章目录AVL节点定义put 方法fixAfterInsert(T val)levelOrderAVLAVL树的定义是,空树是一棵AVL树左右子树高度差 < 2 (递归定义)节点定义public class TreeNode<T> { public T val; public TreeNode left; public TreeNode rig...原创 2019-06-09 16:33:06 · 424 阅读 · 0 评论 -
HashMap源码分析 (jdk1.7)
文章目录HashMap (jdk1.7)构造器put() 操作get() 操作总结HashMap (jdk1.7)HashMap的存储结构是 数组 + 链表 的组合.transient Entry<K,V>[] table = (Entry<K,V>[]) EMPTY_TABLE; 数组 table 存储的是 Entry 对象, 而 Entry 对象是 HashM...原创 2019-03-17 18:27:08 · 113 阅读 · 0 评论 -
栈&队列 Java实现
文章目录链表实现的栈数组实现栈数组实现的循环队列链表实现的队列链表实现的栈由于栈先进后出的特性,push时要用首插法,pop也从头部开始push 先检查链表是否空,空则作为头结点再从head开始pop, 也有一个空的判断public class LinkedStack { public Node peek; public void push(int val) { ...原创 2019-03-19 19:12:22 · 81 阅读 · 0 评论 -
线性排序---桶&计数&基数
文章目录桶排序 (线性)计数排序基数排序总结(极客时间专栏的总结)桶排序 (线性)非基于比较的算法, 都不涉及元素之间的比价操作.桶排序的核心思想是: 将要排序的数据分到几个有序的桶里, 每个桶里的数据再单独进行排序. 桶内排完序之后, 再把每个桶里的数据按照顺序依次取出, 组成的序列就是有序的了.如果要排序的数据有 n 个, 我们把他们均匀地划分到 m 个桶内, 每个桶里就有 k ...原创 2019-03-07 21:33:12 · 173 阅读 · 0 评论 -
链表
文章目录单链表反转链表中环的检测合并两个有序链表删除链表倒数第n大元素寻找链表中间节点(“数据结构与算法之美” 专栏的课后思考题)单链表反转先处理头节点信息循环到尾节点处理尾节点信息 public static Node reverseList(Node head) { if (head == null || head.next == null) return he...原创 2019-03-10 20:58:00 · 123 阅读 · 0 评论 -
冒泡、插入、选择排序
文章目录冒泡排序插入排序选择排序总结冒泡排序冒泡排序只会操作相邻的两个数据。比较,交换之后,每一次冒泡之后会让至少一个元素移动到正确的位置。public static void bubbleSort(int[] a, int n) { if (n &amp;amp;amp;amp;amp;lt;= 1) return; for (int i = 1; i &amp;amp;amp;amp;amp;lt; n; i++) { b原创 2019-02-25 23:19:15 · 157 阅读 · 0 评论 -
堆排序&二叉树排序&希尔排序
堆排序由于本人过于懒惰, 文字性描述之后再更新public static void heapSort(int[] arr) { if (arr == null || arr.length &amp;amp;amp;amp;amp;amp;lt; 2) { return; } for (int i = 0; i &amp;amp;amp;amp;amp;amp;lt; arr.length; i++) { //建大根堆原创 2019-03-01 15:06:44 · 1069 阅读 · 0 评论 -
归并&快排&二分查找
文章目录归并排序快速排序归并排序归并排序算法的核心思想是,先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并到一起,这样整个数组就是有序的了mergeSort(p…r) = merge(mergeSort(p…q), mergeSort(q+1…r)) 终止条件:p &amp;amp;amp;amp;amp;amp;amp;gt;= r 不同再继续分解merge数组A, B 部分的过程中,先申请一个...原创 2019-02-27 19:17:26 · 476 阅读 · 0 评论