自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Yuwen's Hero

为天地立心,为生民立命,为往圣继绝学,为万世开太平

  • 博客(143)
  • 资源 (1)
  • 收藏
  • 关注

原创 add two linked list as integer

Question:You have two numbers represented by a linked list, where each node contains a single digit. Write a function that adds the two numbers and returns the sum as a linked list.EXAMPLE:i

2012-08-28 23:17:11 1081

原创 merge two sorted linked list with duplicates

Question:Given two sorted linked list, and merge them without using extra space (using constant space is allowed). For example, if 1 -> 2 -> 5 merges with 2 -> 4 -> 5,  we have 1 ->  2 -> 4 -> 5

2012-08-28 23:16:12 1032

原创 eliminate the duplicates in a sorted linked list (1)

Qustion:Given a sorted linked list, and remove all the nodes which have duplication. For example, 1 -> 1 -> 2 -> 2 -> 3 ->4 , after removing duplicates, the linked list becomes 3 ->4.Analyze:

2012-08-28 23:15:04 774

原创 eliminate the duplicates in the sorted list (2)

Question:Given a sorted list, and remove the duplicates in the list. For example, 1 -> 2 -> 2 -> 3, after removing the duplicates, we have  1 -> 2  -> 3Analyze:when we remove the duplicate

2012-08-28 23:13:43 714

原创 Longest Substring Without Repeating Characters

Question:Find the longest sub-string without repeating characters. For example, if the given string is "abcdcefg", the longest sub-stringwithout repeating characters is "dcefg".Analy

2012-07-23 05:47:25 1120

原创 名人问题 (Celebrity problem)

问题:在一个房间里有 N 个人,其中一个是名人,所谓名人就是大家都认识他,但是他不认识任何人。其它人可能认识房间里面另外的一部分人。你可以问任何人问题,但是问题只能是:你认识 X 吗,对方回答 Yes or  No. 请问最少要问多少个问题才能把名人找出来?分析:我们把人编号,比如从1 到 N。 我们考虑最坏情况:你问每一个人是否认识 X ,如果大家都认识,那么 X 一定是

2012-07-02 00:00:42 12793 1

原创 打印二叉树的边缘节点

问题:给你一个complete 二叉树,逆时针打印所有边缘节点, 比如:那么,逆时针打印边缘节点后,输出:1 , 3, 5, 9, 8,  6 .分析:如果想写一个方法实现这个要求是很难的,但是,我们可以考虑分步实现。第一步:打印左边的边缘节点;第二步:打印底部所有节点;第三步:打印右边所有边缘节点。代码如下:public stati

2012-07-01 01:06:12 2310

原创 添加最少括号使得给定括号字符串匹配

问题:给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。如:[]是匹配的,所需括号个数为 0.([])[]是匹配的, 所需括号个数为 0.((]是不匹配的, 所需最少括号个数为 3.([)]是不匹配的,所需最少括号个数为 2.分析:此题来自:http://blog.csd

2012-06-27 12:24:47 5890

原创 括号匹配

Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.The brackets must close in the correct order, "()" and "()[]{}" are all va

2012-06-27 08:12:12 1708

原创 O(N lgK) 时间内合并K个有序链表

问题:在O(N lgK) 时间内合并K个有序链表, 这里N指的是K个链表中所有的元素个数。分析:这是一道非常经典的面试题,在很多大公司的面试题中,此题频繁出现。这题也是算法导论的作业题。这题的思路如下:1) 在每一个链表中取出第一个值,然后把它们放在一个大小为K的数组里,然后把这个数组当成heap,然后把该堆建成最小堆。此步骤的时间复杂度为O(K)2 )取出堆中的最小值(也

2012-06-23 04:43:13 3415

原创 一道收集优惠券的面试题

问题:一个饭店发行一套优惠券,一套里面总共有 n 张不同的优惠券,顾客每次吃一次,可以随机获得一张优惠券。如果收集齐一套,下次吃饭可以打折。请问:顾客要来多少次才能收集齐一套优惠券?(是不是和小时候吃零食收集刮刮卡的情形是一样的,呵呵)分析:问题的难点在于顾客获得的优惠劵可能会有重复。但是,我们可以换一角度思考。假设顾客第一次来,他一定会得到一张独一无二的优惠券,第二次来的时候,得

2012-06-22 23:57:54 2311

原创 两个字符串,第二个字符串是第一个的子串,打印第二个字符串缺了的字符位置

问题:google 面试题:两个字符串,第二个字符串是第一个的子串,打印第二个字符串缺了的字符位置。比如:“abc”, “ab” => print  “2”“abc”, “b” => print “0 2”“abc”, “ac” => print “1”“aab”, “ab” =>  print “0”   OR   print “1”。分析:我们只需要对第一个

2012-06-21 13:25:37 1820

原创 求一个数字数组里的最大连续数字的个数

问题:求一个数字数组里的最大连续数字的个数。 比如 3, 4, 4, 4, 2, 2, 3, 4  =>  return 3。此题为google的面试题。分析:设置两个变量:全局最大连续数字个数:maxSucc; 以及局部连续数字个数:  temp。从第二个数字开始,如果当前数字比前一个数字大1,则 temp++,遇到不满足条件的,则比较maxSucc 和 temp, 如果temp 比

2012-06-21 13:02:06 6753 1

原创 判断两个链表是否相交

问题:给出两个单向链表的头指针,比如h1、h2,判断链表是否相交,如果不相交返回NULL;如果相交,返回指向第一个相交节点的指针。时间复杂度控制在O(n)。分析:如果两单向链表相交的话,一定是Y型相交,不可能出现X型,弄清楚这点后接下来的工作就是:(1)先找到h1,h2的最后一个节点L1和L2,同时记录节点数量a,b;(这里假设 a > b)(2)判断最后一个节点是否相同;

2012-05-25 23:52:25 1780

原创 一道有意思的Amazon的概率面试题[# 71]

该问题包含两个子问题:子问题1:给你一个骰子,你扔到几,机器将会给你相应的金钱。比如,你扔到6,机器会返回你6块钱,你扔到1,机器会返回你1块钱。请问,你愿意最多花多少钱玩一次?子问题2:在子问题1里,你只能扔一次,现在呢,可以给你两次机会,但是你自己也可以选择只扔一次。但返回的钱以最后一次为准。比如,第一次你扔了6,你把第二次机会就放弃了,这样机器会返给你6块钱。但是,假设你第一次扔

2012-05-06 13:55:26 9136

原创 一亿数据获取前100个最大值(利用quicksort的原理实现)

前言:刚刚在CSDN上看到一个网友利用最小堆实现 “ 获取一亿数据获取前100个最大值” 。原帖请看:http://blog.csdn.net/yjflinchong/article/details/7533972。 然后自己利用quicksort的原理也写了一个程序来解决那个问题。通过测试,基于quicksort原理的方法平均运行时间是1.264秒,基于最小堆方法的平均运行时间是0.288秒

2012-05-04 12:57:03 6703 8

原创 在两个已经排好序的数组里找出第K小的数

前言:这道题是一道非常常见的面试题,也是一道能够考察一个人的编程能力和算法的一道题。如果要求复杂度为 O(k), 是比较容易做出来的,但是,一般来讲,面试官要求给出更低复杂度的算法。网上有很多不同的解法,但是,总的来讲,那些程序考虑的因素太多,比较难懂,而且结构很乱。在这里写出自己的方法。本文的算法复杂度为 O(lg K)。 PS. 如果你没有见过这个题目,并且能够在30分钟内写出没有bu

2012-05-04 02:04:21 8624 1

原创 给定一个二叉树,从左到右,找出第 k 个叶子节点 [# 65]

问题:给定一个二叉树,从左到右,找出第 k 个叶子节点。比如图中二叉树的第 3 个叶子节点(从左到右)是 11.分析:因为顺序是从左往右数,所以,对于一个节点下的两个叶子节点来讲(比如 6 下面有两个叶子节点 5 和 11),我们要确保先遍历最左边一个,然后再遍历右边一个。这样,其实,在中序遍历,前序遍历和后序遍历中,都能保证左边叶子节点比右边叶子节点先被遍历。我们只需要对

2012-04-22 04:15:01 3026

原创 找出二叉查找树中第n大的值

问题:给一个二叉查找树(BST),找出第 k 大的值。比如:该图中,第3大的值是10.分析:我们可以通过类似中序遍历的方法把BST从大到小排序,然后,就可以得到第 k 大的值了。代码如下:public class NthNode { // k refers to the counter. it is a global variable. static int

2012-04-22 03:53:22 6836 4

原创 判断一个数字是否是回文

问题:给一个数字,判断该数字是否是回文。比如 1221是回文,而123不是。分析:判断一个数字是否是回文,我们可以先把它转成字符串,然后根据回文“对称”的特性进行判断:查看第 x 个字符是否与第 n - x + 1 字符是否相等 (x 从1开始,n/2 结束, n 是指数字长度)。但是,这道题因为是数字,有一种更好的解法。即根据原始数字,通过数学方法构建出它的回文数字,如果原始数字大小

2012-04-19 07:42:49 7290 2

原创 把一个字符串转成double类型的数[# 61]

问题:给一个字符串,比如“-12.05”,把它转成相应的double类型的数。分析:在进行转换的时候,要注意以下问题:1. 该字符串是否为空2. 是否该字符串含有符号;3. 该字符串内是否有非法字符;4. 小数点的位置;5. 该数是否越界;代码如下:public static double atod(String str) throws Exception

2012-04-14 00:25:45 4145

原创 在一个字符串中找到第一个只出现一次的字符

问题:给定一个字符串,比如 A = “ABCDACD”, 找出第一个只出现一次的字符,在A中,第一个只出现一次的字符是‘B’。分析:为了判定某字符是否出现一次,我们可以从从头开始往下遍历,如果没有重复,则选取,否则抛弃。这样做的话复杂度为 O(n^2)。其实,对于判定是否存在或者存在的次数等问题,基本上都会与hastable有关,我们可以构建一个数组 array[256] (ASCII

2012-04-11 06:44:09 8312 4

原创 判断一个字符串里是否包含另一个字符串所有的字符

问题:有两个字符串,每个字符串的字符从A-Z中选取,比如: B = “ABBC”, A = “ACBBD”。那么A包含所有B中出现的字符。如果A = “ACBD” 或者  A = “ABBD”,则我们认为A不包含B中所有的字符。分析:对于“是否包含”的问题,基本上处理的方法都会与hashtable有关。这题也不例外。思路是把所有A中出现的字符放在一个长度为26的字符数组array[26

2012-04-11 05:43:26 8481

原创 间隔问题3 [No. 58]

问题:给一组间隔,找出一个点,使得穿过改点的间隔数量最大, 时间复杂度不能超过 O(N lg N)。比如有一组间隔为[1, 5] [ 3, 7] [2, 4] [8, 9], 那么对于点 3.5, 有3个间隔都包含这个点,但是对于点 8.5,只有一个间隔包含该点。所以,最后答案是 3.5. (当然,3.6, 或者 3.7 都可以)。分析:对于一组间隔,我们把它所有间隔的起始值和结束值放

2012-03-29 10:31:22 1621

原创 间隔问题2 [No. 57]

问题:给一组间隔,把这些间隔合并,使得间隔之间不会有重合。比如:[1, 5], [3, 8], [10, 20], [7, 9] 合并后变成 [1, 9], [10, 20]。分析:首先,因为我们需要判断是否两个间隔是否重合,这样才能合并,检查两个间隔是否重合的代码是: /* * s1: start point of interval 1 * e1: end point

2012-03-28 12:59:29 1026

原创 间隔问题 [No. 56]

问题:给定多个不重合的间隔(interval),比如 [3, 8] [ 12, 17] [22, 29], 然后插入一个新的间隔, 比如 [ 5, 15], 求最后不重合的间隔。比如,起初的不重合间隔变成 [3, 17] [22, 29].分析:首先,我们要知道怎么确定两个间隔是重合的。比如[1, 5] [3, 7] 是重合的,[1, 5] [6, 7] 是不重合的。那么,观察后发现,

2012-03-28 09:12:59 1345

原创 求两个数组的交集

问题: 给你两个排序的数组,求两个数组的交集。比如: A = 1 3 4 5 7, B = 2 3 5 8 9, 那么交集就是 3 5.思路:1. 每一次从B数组中取一值,然后在A数组里逐个比较,如果有相等的,则保存。该算法复杂度为 O(MN). M, N 分别为数组 A B 的长度。2. 因为A B 都排过序,所以,每一次从B数组取值后,可以利用二分查找看是否在数组A里有B所对应

2012-03-25 01:32:43 30309 13

原创 找出长度为n的所有数字,里面相邻数字不能一样 [No.53]

问题:给你一个数字长度,比如是 n ,那么打印出所有长度为 n 的数字,但是相邻数字不能一样。假如n = 3,那么121是可以的,112是不行的。分析:首先,该数字的第一个位置可以是1-9任意值,然后第二个位置可以是1-9任意值,但是不能和前面一个值相等。对于第三个位置,道理是一样的,所以,这里我们需要用到递归。对于每一个位置,我们需要遍历所有与前面位置不同的值。public

2012-02-29 06:44:31 1580

原创 把手机键盘输入转化成短消息 [No. 52]

手机键盘每个数字对应的字符如下:0 ---> "0";1 ---> "1";2 --- > "ABC2";3 ---> "DEF3";4 ---> "GHI4";5 ---> "JKL5";6 ---> "MNO6";7 ---> "PQRS7";8 ---> "TUV8";9 ---> "WXYZ9";* ---> 空格;# --->  断开;

2012-02-29 06:32:08 1629

原创 返回所有n位整数,每个整数里的值是单调递增的

问题:给一个值 n , 返回所有 n 位整数,每个整数里的值是单调递增的。 比如,n = 3,那么长度为3的整数有 123, 124, 125, 134,。。。等。122, 222,这些是不符合条件的。分析:首先,第一个数从1开始,最多到 9 结束,第二个数从 "第一个数 + 1" 开始,最多到 9 结束,第三个数从 “第二个数 + 1”开始,最多到9结束,以此类推。每次到10以后,就

2012-02-24 05:46:25 1425

原创 迷宫问题 [No. 8]

问题:在一个n*m的迷宫里,每一个坐标点有两种可能: 0 或 1。0表示该位置允许通过,1表示该位置不允许通过。从坐标(0,0)点出发,找出所有通往出口(n-1, m-1) 的路径。如果我们用二维矩阵来表示,那么地图可以表示成:0 0 0 0 01 0 1 0 10 0 0 010 1 0 0 00 0 0 1 0在上面一个例子里,其中一条路径为0,0 -> 0

2012-01-24 13:59:13 1342

转载 Sliding Window Maximum

A long array A[] is given to you. There is a sliding window of size w which is moving from the very left of the array to the very right. You can only see the w numbers in the window. Each time the sli

2012-01-11 07:38:54 3791

原创 平均需要扔多少次硬币才能够得到连续2个正面 [# 12]

给你一个硬币,扔到正面的概率是p,扔到负面的概率是 1- p。问题是:平均需要扔多少次,才能得到连续的2个正面。例子:假设正面用 A 表示, 负面是 B表示 ,那么两个连续正面必须是 AA挨着,不能是 A B A B 这样的。分析:假设需要 T 次。 如果我们扔的第一次就是负面,那么第一次就白搭,我们还需要再扔 T  次 (有点混,需要认真思考把它想清楚)。如果我们第一次扔的是正面,那

2012-01-09 14:09:41 3690 3

原创 Java double转String

把一个double类型的值转成string,网上有很多的方法,包括用String.valueOf(Double d),或者 String str = "" + d, 或者用DecimalFormat df = new DecimalFormat("#.00"), 以及用NumberFormat类等。但是,当double的值特别大的时候,这些方法都是没有用的,因为double类型被转化成科学计数法了

2012-01-09 07:24:08 40308 1

原创 给你一串股票价格,找出买点和卖点,使得利润最大。

题目:Given array of integers representing historic stock prices. Find the buying and selling points to maximize the profit. 给你一个整数数组,数组的值代表股票的历史价格。找到买点和卖点,使得利润最大。假设数组为array = {3, 8, 1, 2, 19, 22, 2,

2012-01-03 07:36:46 2294 2

原创 字符串压缩

问题:把字符串压缩,比如aaabbbbc, 压缩后成为:a3b4c1。分析:这题很简单,我们只需要从头到尾遍历一遍字符串即可。首先设置一个计数器count, 每次“指针移位”的时候,判断当前字符是否与前一个字符相等,如果相等,count++, 指针继续下移,否则,我们需要对前面已经遍历的字符串进行处理,然后重新初始化count,直到字符串遍历结束。这题的关键是对最后一个字符的处理。

2012-01-03 01:33:27 1594

转载 How HashMap works in Java

How HashMap works in Java?How HashMap works in Java or sometime how get method work in HashMap is common interview questions now days. Almost everybody who worked in Java knows what hashMap is, wh

2012-01-01 06:14:22 1561

原创 在数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数[#63]。

问题:一个int数组, 比如 array[],里面数据无任何限制,要求求出所有这样的数array[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。分析:最原始的方法是检查每一个数 array[i] ,看是否左边的数都小于等于它,右边的数都大于等于它。这样做的话,要找出所有这样的数,时间复杂度为O(N^2)。其实可以有更简单的方法,我们

2011-12-31 11:54:34 5671

原创 输入一个正数 n,输出所有和为 n 的连续正数序列 [No. 25]

问题:输入一个正数n,输出所有和为 n 的连续正数序列。例如:输入15,由于1+2+3+4+5 = 4+5+6 = 7+8=15,所以输出3个连续序列1-5、4-6和7-8。分析:首先,假设我们是从6开始判断的,因为 6 比 15 小, 而且由于要求序列是连续的,所以,下一次只能选择5,剩余的值是 15 - 6 = 9,因为5 比9 小,我们只能再继续下去,这次选择是 4, 而剩余

2011-12-31 09:32:58 1825

原创 数组中出现次数超过一半的数字

问题:给定一个 int 数组,找出里面出现次数超过一半的数字。分析:首先,我们假定该数组中存在超过一半的数字,要把那个数字找出来,我们有以下方法:1. 排序。出现次数最大的那个数字一定是排序后第 n/2 + 1 那个值(假定是从1 开始数)。复杂度为O(nlgn).2. 遍历一遍数组,找出数组里的最大值max和最小值min,然后创建一个大小为 max - min + 1的数组,

2011-12-29 02:08:03 3017 2

算法设计与分析 王晓东

算法设计与分析 作者:王晓东 清华大学出版社出版

2010-04-10

空空如也

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

TA关注的人

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