笔试面试题
文章平均质量分 67
hopestar2
从事JAVA,C佳佳,shell等语言的软件开发,主要兴趣和方向数据挖掘,分布式数据库等。希望多与志同道合的朋友交流。
展开
-
25匹马的角逐
问题是这样的:一共有25匹马,有一个赛场,赛场有5个赛道,就是说最多同时可以有5匹马一起比赛。假设每匹马都跑的很稳定,不用任何其他工具,只通过马与马之间的比赛,试问最少得比多少场才能知道跑得最快的5匹马。注意:"假设每匹马都跑的很稳定" 的意思是在上一场比赛中A马比B马快,则下一场比赛中A马依然比B马快。稍微想一下,可以采用一种竞标赛排序(Tournament Sort转载 2014-10-01 11:25:41 · 1770 阅读 · 0 评论 -
【题目37】合并两个有序链表
题目:已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序分析:两个链表都应该是增序或者降序方法一使用递归的方法struct Node{ Node* next; int value;};Node* Merge(Node* head1, Node* head2){ Node* res; if(head1 == NULL) retu原创 2009-10-10 20:46:00 · 8910 阅读 · 0 评论 -
开动脑筋的面试题
论坛上网友提出来的问题:http://topic.csdn.net/u/20091007/14/31EBF0AE-0A37-4675-92E4-D739B66B2D2D.html1、有两个桶,一个能盛5升水,一个能盛3升水,如何用测量出4升水?(难度2级)分析: 这道题有两种解法,一种是3+1 = 4 一种是5-1 = 4 5-1情形:原创 2009-10-10 13:48:00 · 1029 阅读 · 0 评论 -
【题目35】和为n连续正数序列
声明:解法非原创,收集于互联网。 题目:输入一个正数n,输出所有和为n连续正数序列。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。 分析: 方法1. 使用枚举的方法,两个for循环可以搞定。时间复杂度O(n^2) 方法2. 因为整数序列是有序的,可以设立两个游标small,big,通过判区间[sma原创 2009-10-09 14:40:00 · 2324 阅读 · 1 评论 -
【题目39】整数集合的并差交集
题目:两个整数集合A,B,求其并集,交集,差集,对称差集,要求写出代码分析: 首先对数组进行排序,如果数组无序的话。具体可以参考侯捷《STL源码解析》的方法实现。我这里就是参照那里的方法实现的。详情请见源码。例子: A: 1 3 5 7 9 11B: 1 1 2 3 5 8 13Union of A and B: 1 1 2 3 5 7 8 9 11 13Interse原创 2009-10-12 14:12:00 · 1274 阅读 · 0 评论 -
【题目38】百度题-热门查询
题目:寻找热门查询:搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。假设目前有一千万个记录,这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。请你统计最热门的10个查询串,要求使用的内存不能超过1G。(1)请描述你解决这个问题的思路;(2)请给出主要原创 2009-10-11 12:50:00 · 1348 阅读 · 0 评论 -
【题目30】反向输出一个单链表的值
分析:解决的方法有很多, 1. 可以将单链表逆转,然后输出 2. 可以使用栈,将单链表中的节点值先压栈,然后输出 3. 使用递归的方法void ReversePrint(Node* head){ if(head->next != NULL) ReversePrint(head->next); printf原创 2009-10-07 21:18:00 · 3383 阅读 · 0 评论 -
【题目33】约瑟夫环
已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。例如:n = 9, k = 1, m = 5出局人的顺序为5, 1, 7, 4, 3, 6, 9, 2, 8 解析:使用std::list来模拟圆圈,时间复杂度为o(n*m)原创 2009-10-07 23:08:00 · 665 阅读 · 0 评论 -
【题目32】翻转句子中单词的顺序
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如: input: how are you output: you are how解法:先将整个句子逆转,然后将每一个单词逆转#include void Reverse(char* begin, char* end){ if(原创 2009-10-07 22:21:00 · 776 阅读 · 0 评论 -
【题目31】Fibonacci数列问题
题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少总跳法,并分析算法的时间复杂度。 如果台阶为1级,有1中跳法如果台阶有2级,有2种跳法如果台阶有3级,有3种跳法如果台阶有4级,有5种跳法。。。。。。。如果台阶有n级,有f(n-1) + f(n-2)中跳法,n > 2问题转化为求Fibonacci数列,数据结构书上的一个线性解法《数据结原创 2009-10-07 21:41:00 · 705 阅读 · 0 评论 -
【题目34】数组的循环右移
题目】有一个整数数组,现要求实现这个整数数组的循环右移。如:1,2,3,4,5循环右移两位后的结果是,4,5,1,2,3 解析:方法1: 假如要右移k位,可以每次右移1位,移动K次。每次移动的时候,将数组最后一个数保存到一个局部变量中,其余的数向后移动一位,移动完成后,将临时变量中的数拷贝到数组第一个数的位置。时间复杂度o(n^2),空间复杂度o(1)void Righ原创 2009-10-08 12:43:00 · 1086 阅读 · 0 评论 -
【题目25】求一个无序数组的第nth大的数
分析: 可以利用跟快排一样的分割法,分到最后的结果是Nth左边的数小于Nth,右边的数大于Nth的值。 实现原理:假设求第3th,也就第四个数2 4 15 6 9 12 20 ->第一次划分结果:2 4 6 15 9 12 20 left | -> right第二次划分结果:2 4 6 9原创 2009-09-26 11:27:00 · 918 阅读 · 0 评论 -
【题目40】求整形数组中满足两数之和为sum的数值对
分析: 方法一,直接两个for循环搞定,时间复杂度0(n^2) void FindSumN_1(int *a,int n,int sum){ int i,j; for(i = 0; i<n; i++) for(j = i+1; j < n; j++) if(a[i] + a[j] == sum) printf("a[%d] + a[%d] =原创 2009-10-12 15:35:00 · 1874 阅读 · 0 评论 -
单例设计模式C++实现
单例模式:作为对象的创建模式,单例模式确保某一个类只有一个实例,并提供一个访问它的全局访问点。class Singleton{public: static Singleton* GetInstance();private: Singleton();private: static Singleton* _instance;};Singleton* Si原创 2009-10-20 15:19:00 · 1017 阅读 · 0 评论 -
(zz)手机上数字串对应的所有字符串
题目:手机上的每个数字对应几个字母,给你一串数字,请你输出所有可能的字母串。要求是最好的算法。 在论坛上找到一个递归的解法,看了一下,其实还蛮简单的。转载地址:http://topic.csdn.net/t/20061227/16/5259955.html 代码比较简洁:#include using namespace std; #define转载 2009-11-18 13:28:00 · 1491 阅读 · 2 评论 -
还是网上常见的智力题
有空的时候再给出解答过程. 1. Four people are in a groupAlice says,”Exactly one of us is lying.”Bob says, ”Exactly two of us are lying.”Charles says, “Exactly three of us are lying.”Dick says, “All four of us原创 2009-11-21 13:00:00 · 1128 阅读 · 0 评论 -
(转载)EMC面经
发信人: cryformilan(buruburukaka), 信区: JobForum标 题: 发篇去年EMC的面经吧发信站: 饮水思源 (2008年11月13日20:33:54 星期四) 看到今年学弟学妹们很辛苦,而EMC今年招人相比而言算是很多的,所以发篇面经希望能有点帮助。 面试是3人流水作业,大致分别是director,manager,engineer,均为技术人员出身,没有HR,转载 2009-11-23 13:30:00 · 3040 阅读 · 0 评论 -
一些智力题
1. 火星上到处是硬币,随便拿起一个,如果是头朝下的就翻成字朝上的,如果是字朝上的就抛出,落地后有各一半的机会头朝上或字朝上。再随便拿起包括刚才那个在内的所有硬币中的一个,重复前述步骤。问,很多很多次后字朝上和头朝上的硬币比例? 类似的题目:地上有很多硬币,有很多机器人在处理硬币,如果是反面,就把硬币翻转;如果是正面就随机抛一下,一直进行下去,问最后地上硬币正反面的比例如何?原创 2009-11-21 00:19:00 · 2069 阅读 · 0 评论 -
(zz)C++类的继承与多重继承的访问控制
前言: 面试时好几次被问到这个问题,刚问到的时候还真记不清了。所以在网上搜索了比较详细的一个例子专门描述访问控制的。这里的例子只针对成员变量,对成员函数也是一样的效果。 //程序作者:管宁 //站点:www.cndev-lab.com //所有稿件均有版权,如要转载,请务必闻名出处和作 #include using namespace std; cl转载 2009-11-19 21:03:00 · 738 阅读 · 0 评论 -
EMC的两道小题目
在学校BBS上看到有人说EMC招人要求:1. 英文流利2. Smart(聪明)3. 编程功底扎实 还有从EMC狄巧女士的博客中给去EMC面试的同学给的意见:博客地址:http://blog.sina.com.cn/s/blog_5972c6a10100fppc.html1.不要迟到。不论你有多少理由,都不是理由。如果你对这份机会重视,就应该预先查好地图,预估好交通时原创 2009-11-18 00:22:00 · 1508 阅读 · 0 评论 -
汉诺塔问题
问题:假设有3个分别命名为X,Y,Z的宝塔,在塔座X上插有n个直径大小各不相同,从小到大编号为1,2,3。。。n的圆盘。现要求将X轴上的n个圆盘移至塔座Z上并仍然按同样的顺序叠排,圆盘移动时必须遵循下列规则:1.每次只能移动一个圆盘;2.圆盘可以插在X,Y和Z中的任一塔座上;3.任何时刻都不能将一个较大的圆盘压在较小的圆盘之上 问你一共需要移动多少次? 首先可以原创 2009-11-18 12:13:00 · 945 阅读 · 0 评论 -
诺西的一道笔试题---寻找丑数
部分转载于:http://zhedahht.blog.163.com/blog/static/2541117420094245366965/ 题目:我们把只包含2、3和5素数因子的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数。 根据丑数的定义,丑数只能被2、3和5整除转载 2009-10-26 20:51:00 · 2497 阅读 · 2 评论 -
二道读程序题目
越简单越容易出错,严重考验我们在做题的时候是否认真仔细。引以为戒吧。1. 函数和宏的问题#include #define ADD(p) {p++; (*p)++;}void Add(int *p) {p++; (*p)++;}int main(){ int a[] = {0,1,2}; int *pa = a; ADD(pa); ADD(pa)原创 2009-10-25 18:12:00 · 1257 阅读 · 0 评论 -
删除整形数组中的冗余整数
题目:给一个未排序的n个元素的数组,数组中所有的元素都在1到n之间,删除数组中所有冗余的数字例如: {1,3,2,3,2,6,4,3}删除冗余后数组: {1,2,3,4,6} 方法一:可以利用哈希表的方法,将所有的数字映射到a[n],如果整数i出现过,则a[i-1]++,最后输出所有a[i] >0的整数即可。这个方法需要o(n)的空间和o(n)的时间。 方法二:如果要求原创 2009-10-22 10:02:00 · 1501 阅读 · 0 评论 -
N皇后问题
8皇后问题: 在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法? 通过递归来解决N皇后的问题。设置三个数组,a[N], b[2N-1],c[2N-1],并初始化为0a[i]为0,表示每列不冲突b[i-j+N-1]为0,表示每主对角线不冲突c[i+j]为0,表示每次对角线不冲突PS:主对角线原创 2009-10-20 16:40:00 · 719 阅读 · 0 评论 -
【题目29】一些简单的算法练习题(3)
Problem 1. 一个完全二叉树有386个叶子节点,问它总共有多少个叶子节点。分析: 386个叶子节点,那么它的上层可以确定的非叶子节点有多少个呢?可以用试探法得到,它上面应该有7层,即非叶子节点数应该有2^8 - 1 = 255个。 根据总的叶子节点数,可以知道第8层一定有叶子节点,可以设第8层非叶子节点数为x, 叶子节点数为y. 则得到一个方程原创 2009-09-30 02:11:00 · 845 阅读 · 0 评论 -
【题目24】大数乘法
声明: 此解法搜索自互联网,非原创,欲了解详细请参考http://www.cnblogs.com/hoodlum1980/archive/2007/08/15/857067.html 这道题也是一道经常考的题目,解法其实很简单,利用三个整形数组,两个数组A和B分别存储两个字符串对应的每一位数字,数组C存储A和B两个数组的乘积。计算方法:C[i+j] += A[i] *B[j];原创 2009-09-22 23:28:00 · 750 阅读 · 2 评论 -
【题目14】求两个字符串的最大相同字串
分析:用最暴力的方法穷举出来,这个复杂度高。#include #include #include char* MaxSubStr(const char* str1, const char* str2){ int len1 = strlen(str1); int len2 = strlen(str2); int maxlen = 0; int index =原创 2009-09-18 09:19:00 · 1199 阅读 · 0 评论 -
【题目11】字符串原地反转
解题思路: 这是百度的一道笔试题,这应该算是百度笔试题中相对简单的一道了。解决的方法也很简单,直接交换字符串两端的字符,直到到达中间位置。 源代码:(VC6下通过测试)#include #include #include char* RevertString(char *str){ char c; int len = strlen(str); for原创 2009-09-17 18:16:00 · 2303 阅读 · 1 评论 -
【题目10】基本的排序算法
解题思路:排序算法有很多种,插入排序,冒泡排序,希尔排序(ShellSort),快速排序,堆排序,归并排序,基排序等。作为一名软件开发人员,需要能够自己动手实现这些算法,掌握这些算法的思想,以及这些算法的时间复杂度,空间复杂度。虽然很时候,在实际的工作中,有库函数可以提供给我们使用,但是我们不仅要知其然更要知其所以然,掌握了它了,或许以后你的程序需要优化的时候会派的上用场呢。原创 2009-09-17 10:10:00 · 728 阅读 · 1 评论 -
【题目9】一些简单的查找交换等算法
解题思路:本文章主要练习一些常用的简单的查找算法二分查找,查找最大值,最小值,以及交换算法。 1. 二分查找:输入一个有序的数组,查找某一指定的数。这里以整数为例。#include int BinarySearch(int *a,int len,int value){ int low = 0; int high = len - 1; while(low <= h原创 2009-09-17 09:21:00 · 603 阅读 · 0 评论 -
【题目6】如何设计一个可以获取最小值的栈
解题思路:解题的关键是用一个链表结构来存储当前栈中元素最小值的索引,每压入一个元素,该元素与链表中记录的当前最小元素索引指向的元素比较,如果小于最小值,将压入元素的索引存入链表中,否则,将原先最小值的索引继续存储在链表中。举个例子:栈: 8, 3 , 5, 10, 1最小元素索引: 0 1 1 1 5弹出一个元素后:原创 2009-09-16 11:16:00 · 765 阅读 · 0 评论 -
【题目2】给定一个字符串数组,从中找出第一个只出现一次的字母
这个题目看似简单,把代码调试通过花了我两个多小时唉,越做对自己越没信心,看来要再把数据结构复习一遍了。 解题思路:利用哈希表,因为字符最多只有255个,可以利用这个特性建立一个哈希表,将字符串中所有的字符映射到这个哈希表中,记录出现的每个字符的个数。最后查找哈希表获取第一个出现字数为一的字母。 这里有一个问题,我们如何知道我们取到的是字符串中的第一个出现原创 2009-09-15 19:04:00 · 6232 阅读 · 7 评论 -
【题目1】给一个整型数组,求最大子序列和
马上要开始找工作了,做些题目练练手。源代码:(在VC6下通过编译,正确执行)#include int FindGreatestSecSum(int *a,int len){ int sum = 0, max = 0; for(int i = 0; i < len; i++) { if(sum <= 0)原创 2009-09-15 18:59:00 · 1752 阅读 · 0 评论 -
【题目8】查找单链表倒数第K个元素
解题思路:这个题目还是比较简单的,用到一个非常简单的方法就可以在0(n)时间内找到这个值。具体的方案是一趟遍历,设立一个临时指针pointer(初始值为第一个元素位置)和一个遍历的统计个数(count = 0),遍历元素到达K个后,临时指针指向第K+1个元素的位置,count清零,重新计数,继续遍历K个元素,直到达到链表尾。这里有两种情况:1.遍历完后,count刚好为K,po原创 2009-09-16 13:05:00 · 1415 阅读 · 0 评论 -
【题目7】逆转一个单链表
解题思路:网上有很多解决方案,这里介绍一种比较简单的,好理解的吧。当前节点:cur = NULL; 上一个节点:last = NULL;头节点: head开始时: 4---->3----->2---->1 -> head头指针往前移动: 42---->1 ->原创 2009-09-16 12:49:00 · 1017 阅读 · 2 评论 -
【题目5】如何使用两个栈来实现一个队列
解题思路: 栈的特性: 先进后出 队列的特性: 先进先出如何用两个栈来实现一个队列呢,我们可以用一个栈专门用来入队,一个栈用来出队。 源代码:(在VC6下通过编译,正确执行)#include #include #include #include class SQueue{public: void EnQueue(int value)原创 2009-09-16 10:21:00 · 1440 阅读 · 0 评论 -
【题目4】如何自己实现C函数strstr()
解题思路: 这个网络上已经有很多答案,这里列举一个复杂度为0(m*n)的例子。实现的原理很简单,顺序遍历要查找的字符串,如果没有找到,字符串指针往前一位,再往后比较要查找的字符串(模式串),如下图所示:a b c d d d a d a c a b d a d d d a d c k -> d a d a ch原创 2009-09-16 09:10:00 · 1510 阅读 · 1 评论 -
【题目15】求字符串的最长重复子串
转载自:http://blog.csdn.net/roynee/archive/2009/07/02/4314791.aspx 利用 “后缀数组”(需排序) 求字符串中存在的最长的重复子串,要建立指针数组并通过qsort排序 时间复杂度是O(nlogn)主要开销在于排序的过程。#define MAXSIZE 100#include #include #include转载 2009-09-18 12:13:00 · 895 阅读 · 0 评论 -
【题目21】判断一个数是否为素数
1. 判断一个数是否为素数,根据素数的定义来求解bool IsPrime(int n){ if(n < 1) return false; for(int i = 2; i < n; i++) if( n%i == 0) return false; return true;} 2. 根据下面这条定理来求解定理: 如果n不是素数, 则n有满足1bool原创 2009-09-19 20:17:00 · 932 阅读 · 0 评论