自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 java

Difference between Abstract Classes and InterfaceWhat is an Abstract Class?It only allows other classes to inherit from it but cannot be instantiated. The advantage is that it enforces certain hierarc...

2011-04-12 13:17:38 125

原创 Trie and Suffix

前缀树(trie)和后缀树(suffix)是两种非常重要的数据结构,往往用来加速字符串的匹配和查找。具体的介绍可见下面的资料:http://blog.csdn.net/luowen3405/archive/2011/04/01/6295839.aspxhttp://blog.csdn.net/TsengYuen/archive/2009/11/16/4815921.aspx T...

2011-04-12 12:23:58 225

原创 Comparision between BST, Array, LinkedList, Hashtable

BST: BST has the advantages of both array and linked list: it can do binary search and also it is of dynamic size. BST allows fast enumeration of the items in key order.  Lookup algorithms get m...

2011-04-12 09:11:57 124

原创 BST compared to Linked List

1. in the worst case, BST degenerates to a linked list2. O(logn) insert/delete time3. conding complexity

2011-04-01 07:22:58 107

原创 有序数组合并后寻找中间值

给定两个有序数组,长度分别为m和n,给出算法在O(1)空间和O(m+n)时间内得到两个数组merge后的中间值 1. solution1:    给每个数组赋一个指针,然后二路遍历,每次移动指针做比较,记录移动的次数 2. solution2:    注意假设现在分别取两个数组的中间值,ai和bj,如果bj-1<ai<bj,则bj就是合并后第i+j个值,也就是m...

2011-04-01 07:06:56 210

原创 Recent 20 problem of Google

1.给字符串求频率最高字符。字符串大咋办,多核咋办。 a. brute-force. 对每个字符依次遍历 O(n^n). b. hashtable. hashtable内保存频率。遍历完字符串再遍历hashtable.  c. 还是hashtable, 但是可以对hashtable做堆处理,使得hashtable时刻都是一个Maxheap2.俩数组交集。有序或无序。 a. 二路...

2011-04-01 00:29:12 93

原创 Difference between Threads and Processes

What is the difference between Threads and Processes?A process is a collection of virtual memory space, code, data, and system resources. A thread is code that is to be serially executed within a ...

2011-03-29 21:56:27 162

原创 寻找不在集合中的整数

给定一个集合,里面的数是从0到4G的,给出有效的算法来得到一个不在这个集合中的整数。如果只有640MB的内存,又该怎么求?对于第一个情况,可以利用external的buffer来解决。设置一个长为4G的数组,每个元素代表从0到4G的一个整数。遍历给定集合,如果遍历到的数在0和4G之间,就在数组的相应位置计数。遍历完一遍后,遍历数组,返回第一个值为0的元素。如果只有640...

2011-03-29 21:36:42 215

原创 递归打印字符组合

给定一个字符串,用递归的方法打印出字符串中字母的所有组合[code="java"]public class StringOperation { public static void main(String[] args) { String s = "haa"; AllArray(s); } private static void AllArray(...

2011-03-29 10:51:53 151

原创 在string中寻找第一个非重复character

给定一个string, 寻找第一个没有被重复的character. Method1: brute-force, 对于每个character,遍历string来检查是否有重复。O(n*n)Method2: hashtable, O(n)Method3: 同样是hashtable,将hashtable制定为次数的累计...

2011-03-29 08:54:42 127

原创 寻找最小的祖先

题目:给定一个binary search tree 和两个节点,寻找这两个节点的最小公共祖先。 首先要尽快给出最直接的办法,不要管效率的问题。可以利用额外的存储空间来解决这个问题,先用DFS分别寻找到这两个元素,并且记录下寻找过程中遍历的元素,得到两个数组。然后挨个比较数组中的元素,直到出现不同的为止。 这个算法首先需要额外空间,其次如果这两个元素层数很多,而且BST不是平衡的...

2011-03-27 06:42:29 164

原创 Tree and Graph

1. 二叉查找树是数据结构中一个非常重要的内容。因为它的查找复杂度(包括插入和删除)都达到了O(logn)的级别。每一次的迭代,都能够减少一半的查找数据量。然而,如果每个节点都只有一个孩子的话,查找复杂度就变成了O(n),因为此时实际上二叉查找树已经变成了一个链表。 2. 堆其实也是树的一种。堆最大的优点就是可以在常量时间里得到最大或者最小值。    删除和插入的复杂度是O(log(n...

2011-03-27 05:04:37 99

原创 tips

1. 往往来说,一个题目会至少涉及两个东西:变量和数据量。在给出算法的时候,必须要考虑两者的特殊情况,通常就是两者都非常的大。 例如,实现算法找到一个单向链表中倒数第n个元素。这个问题有很多解法,其中一个就是利用一个临时buffer来存储遍历的元素,这样只需要一次遍历就可以得到这些元素。然而,如果n非常大的时候,这个临时的buffer所占用空间就过大,也就无法达到最优解了。 2. ...

2011-03-27 04:31:05 95

原创 逆向输出单向链表

既然是单向链表,所以不可避免的一定是从前向后遍历。逆向输出的过程,可以看做是“找下一个”的重复操作,直到下一个是null。所以一定可以用递归来解决。当然如果利用栈来解决也是可以的。[code="java"]public static void ReverseOutput(LinkedNode head){ if(head == null) return; if(he...

2011-03-27 04:01:32 169

原创 LinkedList

[code="java"]public static void main(String[] args) { int length = 10; LinkedNode head = CreateLinkedList(10); } public static LinkedNode CreateLinkedList(int length){ LinkedNode hea...

2011-03-27 03:56:42 117

原创 BFS+DFS

利用tree来做BFS和DFS。在tree里,BFS和level-Order的遍历,而DFS和PreOrder是一样的[code="java"]public class Graph { static int index = 0; public static void main(String[] args) { char[] str = {'a','b','c','#','#'...

2011-03-27 03:52:41 129

原创 BinaryTree-Traverse

首先定义Node类[code="java"]public class Node { Node lchild; Node rchild; char data; int status;}[/code]主函数:[code="java"]public class BinaryTree { static int index = 0; public static voi...

2011-03-27 03:50:54 112

原创 Fibonacci

Fibonacci的公式:f(n+2) = f(n+1) + f(n)。在面试中,也会有Fibonacci的变形出现,例如:已知有n级台阶,每次只能上2级或者1级,问一共有多少种上法?如果检查整个数列会发现,这个数列的同项公式正是Fibonacci,只不过数列的前两项是1和2.[code="java"]public class Stairs { public sta...

2011-03-27 03:46:22 106

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除