
Data Structure
文章平均质量分 79
Firehotest
这个作者很懒,什么都没留下…
展开
-
Basic knowledge about binary trees
Difference between complete binary tree and full binary tree:Actually, full binary tree is a special form of complete binary tree. Complete tree satisfies that all the nodes except the nodes at原创 2016-03-29 10:50:20 · 400 阅读 · 0 评论 -
Data Structure: Segment Tree 线段树
线段树主要用于Range Query. 适用问题在:这个大区域的某个子区间最小值,这个大区间的某个子区间的和等等。线段树的某个叶子节点都是代表一个大区间的元素。为什么要使用线段树?那先让我们看看,如果不使用线段树,上述的求某个子区间最小值的问题该如何解决。方案1:每次query都去遍历一次子区间。如果有m次查询,有n个元素的话,时间复杂度就是O(mn)。原创 2017-09-29 12:02:29 · 516 阅读 · 0 评论 -
Data Structure: Trie(字典树)
字典树是一个用数组(数组代表子节点数目是静态的)来表示子节点的树结构。同时节点也需要域:boolean isEnd。 本文章参考:https://leetcode.com/problems/implement-trie-prefix-tree/solution/Trie的一些应用:1)Autocomplete; 2) Spell checker; 3) IP routing原创 2017-09-10 03:02:17 · 791 阅读 · 0 评论 -
Data Structure: 图的拓扑排序
Course ScheduleThere are a total of n courses you have to take, labeled from 0 to n - 1.Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is e...原创 2017-09-13 12:21:39 · 414 阅读 · 0 评论 -
Data Structure: All you should know about Hash
Why do we need hashing?Assume we store our data in an array, and we want to search for an element. The normal time consume is O(n). Since we need to traversal the array's element one by one.原创 2017-01-13 04:21:20 · 521 阅读 · 0 评论 -
Data Structure:Binary Tree
二叉树就是每个节点至多有两个孩子的树。特殊的二叉树:完全二叉树和满二叉树。满二叉树是叶子节点层(最后一层)是满的二叉树(其它层当然也是满的)。而完全二叉树则叶子节点层不要求满,但是编号不能断的二叉树。什么是编号不能断?意思是按照顺序存储结构给完全二叉树的节点编号,编号出现中断,譬如最后一层有个叶子节点是父节点的左孩子,但它是空的,但另外一个叶子节点作为同一个父节点的右孩子,不为空。那么原创 2016-09-29 03:01:54 · 561 阅读 · 0 评论 -
Data Structure : LinkedList
Why do we need LinkedList?Java的Collection当中有ArrayList作为可变(表面上可变)长的数组,然而其底层也是利用数组实现的。所以,存在两个明显的短板。1)当增加元素填满了底层数组的时候,底层数组需要resize,这时候需要创建一个1.5x长度的数组,然后复制旧数组的内容到新的数组,耗费许多时间;2)当删除某个index的元素时原创 2017-01-31 13:00:18 · 374 阅读 · 0 评论 -
Data Structure: 图 (Graph)
图的定义:图的组成元素是:顶点和边。对于有向图而言,还有方向。然而,图的最基本的要求是,顶点的结合一定是非空。不同于空链表和空树。并没有空图的说法。但边集可以是空。一些定义:1、简单图:任何一个顶点不能通过边回到自己,且同一条边不能重复地出现。2、有向边和无向边的不同表示方法:无向边用() 小括号表示,(A,D),用尖括号表示有向边.3原创 2016-12-07 13:58:06 · 2817 阅读 · 0 评论 -
Data Structure: How to traversal Binary Tree Iteratively (Preorder, Inorder and Postorder)
Preorder Traversal: public class Solution { public List preorderTraversal(TreeNode root) { List res = new ArrayList(); if (root == null) { return res; }原创 2017-02-28 05:48:17 · 371 阅读 · 0 评论 -
Data Structure & Java: 堆、堆排序与PriorityQueue
堆的实质:堆其实是一棵特殊的完全二叉树。每一个结点的值都大于或者等于左右孩子结点的值(大顶堆),或者每一个结点的值都小于等于左右孩子结点的值(小顶堆)。对于完全二叉树,因为除了最后一层,其它的层都是满的。所以,一般对于平衡二叉树可以利用顺序存储结构(数组)。所以,对应完全二叉树的顺序存储结构:数组的i(index = i)结点的父结点下标就为(i – 1) / 2。它的原创 2016-11-17 03:43:44 · 487 阅读 · 0 评论 -
Notes: 排序算法小结 (Sorting)
最近两天,复习了几个经典的排序算法。在这里,写一份小结,粗略回顾。1)Bubble Sort顾名思义,就是把最小的数如冒泡一样,在每次的遍历当中,移到最顶的位置。public void BubbleSort(int[] input){ for(int i=0;i<input.length;i++){ for(int j=input.length-1;j>i;j--){原创 2016-09-23 13:21:17 · 534 阅读 · 0 评论 -
Data Structure: Binary Index Tree(LC308作为例子)
Binary Index Tree适合用以Range Query. 例如:求一个大区间的某个小区间的和。为什么要使用Binary Index Tree?先看看,如果不使用Binary Index Tree的话,我们可以使用的方法。1)直接求。那么复杂度是O(mn)。m是查询次数,n是大区间的元素个数。2)使用sum的array,建立一个array,每个ind原创 2017-09-29 23:10:17 · 1524 阅读 · 0 评论