摘要:概述 堆是一颗完全二叉树。分为大根堆(父节点>=所有的子节点)和小根堆(父节点<=所有的子节点)。 插入、删除堆顶都是O(logN),查询最值是O(1)。 完全二叉树(Complete Binary Tree) 若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,
阅读全文
摘要:传统的哈希表 哈希冲突 如果不同字符串被hash到了同一个位置,称为哈希冲突。解决哈希冲突的常用办法有以下几种: 拉链法(开哈希) 在使用拉链法解决哈希冲突时,对于每一个数组位置,放置的元素相当于一个链表,属于同一个箱子的所有键值对都会排列在链表中。当有冲突时,我们将这个元素插入到链表尾部,以此来避
阅读全文
摘要:在这一章节的学习中,我们将要学习一个数据结构——二叉树(Binary Tree),和基于二叉树上的搜索算法。 在二叉树的搜索中,我们主要使用了分治法(Divide Conquer)来解决大部分的问题。之所以大部分二叉树的问题可以使用分治法,是因为二叉树这种数据结构,是一个天然就帮你做好了分治法中“分
阅读全文
摘要:内存中的栈空间与堆空间 我们通常所说的内存空间,包含了两个部分:栈空间(Stack space)和堆空间(Heap space) 当一个程序在执行的时候,操作系统为了让进程可以使用一些固定的不被其他进程侵占的空间用于进行函数调用,递归等操作,会开辟一个固定大小的空间(比如 8M)给一个进程使用。这个
阅读全文
摘要:二分法模板 非递归版本: 死循环的发生:when target is the last position of the rangenums = [1,1], target = 1使用 start < end 无论如何都会出现死循环 递归版本: 常见问题 Q: 为什么要用 start + 1 < en
阅读全文
摘要:时间复杂度 在面试中,经常会涉及到时间复杂度的计算。当你在对于一个问题给出一种解法之后,面试官常会进一步询问,是否有更优的方法。此时就是在问你是否有时间复杂度更小的方法(有的时候也要考虑空间复杂度更小的方法),这个时候需要你对常用的数据结构操作和算法的时间复杂度有清晰的认识,从而分析出可优化的部分,
阅读全文
摘要:Java 的 String 类基本用法介绍:http://www.runoob.com/java/java-string.html Java 的 String.substring 函数:https://beginnersbook.com/2013/12/java-string-substring-m
阅读全文
摘要:能够用 BFS 解决的问题,一定不要用 DFS 去做 因为用 Recursion 实现的 DFS 可能造成 StackOverflow (NonRecursion 的 DFS 一来你不会写,二来面试官也看不懂) 1. Queue Java常用的队列包括如下几种: ArrayDeque:数组存储。实现
阅读全文
摘要:什么是 Interface Java接口(Interface)是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为。打一个比方,接口好比一个戏中的角色,这个角色有一些特定的属性和操作,然后实现接口的类
阅读全文
摘要:• 二叉树(Binary Tree)问题的考点剖析 • 第一类考察形态:求值,求路径类二叉树问题 • 第二类考察形态:结构变化类二叉树问题 • 第三类考察形态:二叉查找树(Binary Search Tree)类问题 • 非递归(Iteration)版本的中序遍历(Inorder Traversal
阅读全文
摘要:ps 狗家很喜欢考dp...... 同向双指针 同向双指针的问题,是指两根指针都从头出发,朝着同一个方向前进 O(N) eg: http://www.lintcode.com/problem/remove-duplicate-numbers-in-array/ http://www.lintcode
阅读全文
摘要:UnionFind就是acm中常用的并查集... 并查集常用操作 另外补充一下STL常用操作 相关问题: 547. Friend Circles 纯裸题噢... 1 class Solution { 2 public: 3 int root[210]; 4 bool v[210]; 5 6 void
阅读全文
摘要:k-th smallest/biggest 问题大约有这几道: 可以看出,其实373 719 786是同一题,378 668是同一题 这种题大致有两种思路: 1. 用heap 关于堆的介绍网上有一大把......这里只划重点 堆是一种是一种特殊的完全二叉树,其中每个根节点一定比它的左、右儿子节点都大
阅读全文
摘要:用记录附加信息的val数组记录次数即可。 trie的原理:每个可能出现的字目给一个编号c,那么整个树就是一个c叉树 ch[u][c]表示 节点u走c边过去之后的节点 PS:trie树还有种动态写法,使用指针和动态分配内存代替了连续的ch数组,更加节省内存。 Reference:http://blog
阅读全文
摘要:并查集初步 PS:今天入手了一台1993年产的IBM Model M弹簧轴机械键盘,真好用呀真好用~ ^_^ 并查集经常借助树形数据结构来实现。 设Father[i]表示元素i所属于的集合编号。初始化Father[x]=x;即每个节点都是单独的一棵树 并查集具有两项基本操作: Int Find(in
阅读全文
摘要:给定一个二分图G,M为G边集的一个子集,如果M满足当中的任意两条边都不依附于同一个顶点,则称M是一个匹配。 Reference: google上搜"ByVoid 二分图"(被墙了T^T) http://ycool.com/post/cfnym64 http://segmentfault.com/q/
阅读全文