data structure, algorithm, etc.
【转帖】数值的整数次方
摘要:转自:http://zhedahht.blog.163.com/blog/static/254111742009101563242535/ 题目:实现函数double Power(double base, int exponent),求base的exponent次方。不需要考虑溢出。 分析:这是一道看起来很简单的问题。可能有不少的人在看到题目后30秒写出如下的代码:double Power(double base, int exponent){ double result = 1.0; for(int i = 1; i <= exponent; ++i) ...
阅读全文
posted @
2011-10-27 14:41
白草黒尖
阅读(298)
推荐(0)
【转帖】Singleton Pattern
摘要:转自:http://zhedahht.blog.163.com/blog/static/2541117420105146828433/ 题目:设计一个类,我们只能生成该类的一个实例。 分析:只能生成一个实例的类是实现了Singleton模式的类型。 由于设计模式在面向对象程序设计中起着举足轻重的作用,在面试过程中很多公司都喜欢问一些与设计模式相关的问题。在常用的模式中,Singleton是唯一一个能够用短短几十行代码完整实现的模式。因此,写一个Singleton的类型是一个很常见的面试题。 事实上,要让一个类型是能创建一个实例不是一件很难的事情。我们可以把该类型的构造函数设为private,.
阅读全文
posted @
2011-10-27 13:02
白草黒尖
阅读(296)
推荐(0)
【转帖】对称子字符串的最大长度
摘要:转自:http://zhedahht.blog.163.com/blog/static/25411174201063105120425/ 题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。 分析:可能很多人都写过判断一个字符串是不是对称的函数,这个题目可以看成是该函数的加强版。 要判断一个字符串是不是对称的,不是一件很难的事情。我们可以先得到字符串首尾两个字符,判断是不是相等。如果不相等,那该字符串肯定不是对称的。否则我们接着判断里面的两个字符是不是相等,以此类推。基于这个思路,我们不难写.
阅读全文
posted @
2011-10-26 23:01
白草黒尖
阅读(312)
推荐(1)
【转帖】二叉树两个结点的最低共同父结点
摘要:转自:http://zhedahht.blog.163.com/blog/static/25411174201081263815813/ 题目:输入二叉树中的两个结点,输出这两个结点在数中最低的共同父结点。二叉树的结点定义如下:struct TreeNode{ int m_nvalue; TreeNode* m_pLeft; TreeNode* m_pRight;}; 分析:求数中两个结点的最低共同结点是面试中经常出现的一个问题,这个问题至少有两个变种: 第一变种是二叉树是一种特殊的二叉树:查找二叉树,也就是树是排序过的,位于左子树上的结点都比父结点小,而位于右子树的结点都...
阅读全文
posted @
2011-10-26 22:27
白草黒尖
阅读(457)
推荐(0)
【转帖】数组中出现次数超过一半的数字
摘要:题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。(类似于《编程之美》中的“寻找发帖水王”) 分析:这是一道广为流传的面试题,包括百度、微软和Google在内的多家公司都曾经采用过这个题目。要几十分钟的时间里很好地解答这道题,除了较好的编程能力之外,还需要较快的反应和较强的逻辑思维能力。 看到这道题,我们马上就会想到,要是这个数组是排序的数组就好了。如果是排序的数组,那么我们只要遍历一次就可以统计出每个数字出现的次数,这样也就能找出符合要求的数字了。题目给出的数组没有说是排好序的,因此我们需要给它排序。排序的时间复杂度是O(nlogn),再加上遍历的时间复杂度O(n),因此.
阅读全文
posted @
2011-10-26 20:00
白草黒尖
阅读(272)
推荐(0)
【转帖】复杂链表的复制
摘要:转自:http://zhedahht.blog.163.com/blog/static/254111742010819104710337/ 题目:有一个复杂链表,其结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任一结点或者NULL,请完成函数ComplexNode* Clone(ComplexNode* pHead),以复制一个复杂链表。struct ComplexNode{ int m_nValue; ComplexNode* m_pNext; ComplexNode* m_pSibling;}; 下图是一个含有5个结点的该类...
阅读全文
posted @
2011-10-26 19:38
白草黒尖
阅读(821)
推荐(1)
【转帖】加法(不使用+、-、*、/)
摘要:转自:http://zhedahht.blog.163.com/blog/static/254111742011125100605/ 题目:写一个函数,求两个整数的之和,要求在函数体内不得使用+、-、×、÷。 分析:5的二进制是101,17的二进制10001。还是试着把计算分成三步:第一步各位相加但不计进位,得到的结果是10100(最后一位两个数都是1,相加的结果是二进制的10。这一步不计进位,因此结果仍然是0);第二步记下进位。在这个例子中只在最后一位相加时产生一个进位,结果是二进制的10;第三步把前两步的结果相加,得到的结果是10110,正好是22。由此可见三步走的策略
阅读全文
posted @
2011-10-26 15:26
白草黒尖
阅读(334)
推荐(0)
【转帖】字符串的组合
摘要:转自:http://zhedahht.blog.163.com/blog/static/2541117420114172812217/ 题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。 假设想在长度为n的字符串中求m个字符的组合,先从头扫描字符串的第一个字符。针对第一个字符,有两种选择:一是把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;而是不把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选择m个字符。这两种选择都很容易用递归实现。下面是这种思路的参考代码:void Co.
阅读全文
posted @
2011-10-26 10:57
白草黒尖
阅读(264)
推荐(1)
【转帖】字符串的排列
摘要:转帖:http://zhedahht.blog.163.com/blog/static/254111742007499363479/ 题目:输入一个字符串,打印出该字符串中字符的所有排列,如字符串abc,则输出由字符a、b、c所能排列出的所有字符串abc、acb、bac、bca、cab和cba。 分析:这是一道很好的考查对递归理解的编程题,因此在过去一年中频繁出现在各大公司的面试、笔试题中。 以三个字符abc为例来分析一下求字符串排列的过程。首先我们固定第一个字符a,求后面两个字符bc的排列。当两个字符bc的排列求好之后,我们把第一个字符a和后面的b交换,得到bac,接着我们固定第一个字符b.
阅读全文
posted @
2011-10-26 10:35
白草黒尖
阅读(266)
推荐(0)
【转帖】判断二叉树是不是平衡的
摘要:转自:http://zhedahht.blog.163.com/blog/static/25411174201142733927831/ 题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。 在本系列博客的第27题,我们曾介绍过如何求二叉树的深度。有了求二叉树的深度的经验之后再解决这个问题,我们很容易就能想到一个思路:在遍历树的每个结点的时候,调用函数TreeDepth得到它的左右子树的深度,如果每个结点的左右子树的深度相差都不超过1,按照定义它就是一棵平衡的二叉树。这种思路对应的代码如下: 1 bool Is.
阅读全文
posted @
2011-10-25 23:34
白草黒尖
阅读(359)
推荐(1)
【转帖】数对之差的最大值
摘要:http://zhedahht.blog.163.com/blog/static/2541117420116135376632/ 题目:在数组中,数字减去它右边的数字得到一个数对之差,求所有数对之差的最大值,如数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果。 分析:看到这个题目,很多人的第一反应是找到这个数组的最大值和最小值,然后觉得最大值减去最小值就是最终的结果。这种思路忽略了题目中很重要的一点:数对之差是一个数字减去它右边的数字。由于我们无法保证最大值一定位于数组的左边,因此这个思路不管用。 于是我们接下来可以想到让每一个数字逐个减.
阅读全文
posted @
2011-10-25 23:04
白草黒尖
阅读(339)
推荐(1)
【转帖】0-1背包:纸币组合
摘要:有不限数目的1、5、10、20、50面额的纸币,有多少种方法凑出100元? 笨办法:暴力枚举~ 1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 5 const int Len = 5; 6 int ans = 0; 7 int m[Len] = {50, 20, 10, 5, 1}; 8 int total[Len] = {2, 5, 10, 20, 100}; 9 int n[Len];10 int sum = 100;11 12 void GetNum(int m[], int n[
阅读全文
posted @
2011-10-21 14:44
白草黒尖
阅读(309)
推荐(0)
【转帖】字符串通配符
摘要:【前言】 选题仍然是源自课堂习题,是要设计一个含有通配符问号的KMP字符匹配算法。其实这个目标是非常容易达到的。但是,接着想到通配符星号时,就感到有些困难了。因为星号可以匹配的字符个数不是确定的,所以子串中含有星号时要多次扫描母串,每种情况都要逐一比对才行,现有的匹配算法显然达不到这样的目的。现在要设计一种算法,即能完成不含通配符的匹配问题,同时又能适应含通配符的匹配问题。【分析】 通配符共有两种,问号和星号。“?”表示一个任意字符,而“*”则表示任意个任意字符。 首先来想问号的处理,子串扫描到问号时,不管母串是什么字符我们都认为它们是匹配的就行了。就是在匹配条件中加一条,变成s[i]==t[
阅读全文
posted @
2011-10-13 10:17
白草黒尖
阅读(2284)
推荐(0)