面试问题及算法
文章平均质量分 65
3h随然吧
热爱生活,钻研技术
展开
-
编程之美2: 重建二叉树
#include#includeusing namespace std;typedef struct tagNode{ tagNode* left; tagNode* right; char value;} Node;void rebuildtr原创 2015-03-13 23:21:19 · 809 阅读 · 0 评论 -
42. 微软面试题:调整数组顺序使奇数位于偶数前面(数组)
题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。要求时间复杂度为O(n)。分析:只需要设置头尾两个指针遍历就可以了,前面遇到偶数记下来,后面遇到奇数记下来,交换,知道后面的指针小于前面的指针。实现如下:#include#include#include#include#include原创 2014-05-15 20:19:03 · 1290 阅读 · 0 评论 -
34. 百度研发笔试题: 一串首尾相连的珠子(m个),有N种颜色(N<=10)
题目:一串首尾相连的珠子(m个),有N种颜色(N设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。并分析时间复杂度与空间复杂度。分析:使用一个额外的数组存储颜色计数: colors[N],并且定义一个颜色个数遍历int cn=0;使用数组a[m]表示首尾相连的珠子。遍历数组a,统计对应的颜色,如果等于颜色的个数等于N,记录下开始位置i,和结束位原创 2014-03-26 20:34:43 · 2455 阅读 · 1 评论 -
35. 百度研发笔试题:设计一个系统处理词语搭配问题
题目:设计一个系统处理词语搭配问题,比如说 中国 和人民可以搭配,则中国人民 人民中国都有效。要求: *系统每秒的查询数量可能上千次; *词语的数量级为10W; *每个词至多可以与1W个词搭配当用户输入中国人民的时候,要求返回与这个搭配词组相关的信息。分析:性能要求:每秒查询量达到上千次,意思就是QPS要达到1000以上。搜索端使用原创 2014-03-26 22:55:10 · 2714 阅读 · 0 评论 -
36. 微软面试题:请修改append函数, 利用函数实现(链表)
题目:请修改append函数,利用这个函数实现:两个非降序链表的并集,1->2->3 和 2->3->5 并为 1->2->3->5另外只能输出结果,不能修改两个链表的数据。分析:这题很简单,两个指向链表的指针,比较对应的值,并遍历实现如下:#includeusing namespace std;struct Node{ No原创 2014-03-27 00:01:57 · 1549 阅读 · 0 评论 -
39. 腾讯面试题:有一千万条短信,有重复,以文本文件的形式保存,一行一条,有重复。
有一千万条短信,有重复,以文本文件的形式保存,一行一条,有重复。请用5分钟时间,找出重复出现最多的前10条。分析:常规方法是先排序,在遍历一次,找出重复最多的前10条。但是排序的算法复杂度最低为nlgn。可以设计一个hash_table, hash_map,依次读取一千万条短信,加载到hash_table表中,并且统计重复的次数,与此同时维护一张最多10条的短信表。这样原创 2014-04-05 07:40:18 · 7645 阅读 · 16 评论 -
38. 2014年4月1日的360搜索广告部面试题
360的总部在北京望京798附近,这周有朋友去面试了,讲了下大致过程。360总部一楼有个大厅,前台有很多MM,说明来意,被指向面试区(人还挺多的,应该很缺人,或者有新项目)。一面:技术面,是个小弟面的。1)介绍下自己2)说了几个重要的项目,问了些项目的情况,这都是面试官感兴趣的话题。3)出了个编程题:设计一个trie树,实现创建 trie树和检索功能,数据为原创 2014-04-05 00:41:00 · 2105 阅读 · 0 评论 -
30. 谷歌面试题:n支队伍比赛,分别编号为0,1,2。。。。n-1
题目:n支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系,存储在一个二维数组w[n][n]中,w[i][j] 的值代表编号为i,j的队伍中更强的一支。所以w[i][j]=i 或者j,现在给出它们的出场顺序,并存储在数组order[n]中,比如order[n] = {4,3,5,8,1......},那么第一轮比赛就是 4对3, 5对8。.......胜原创 2014-03-21 23:43:37 · 2140 阅读 · 0 评论 -
33. 百度面试题:有一个很大很大的输入流,大到没有存储器可以将其存储下来,而且只输入一次,如何从这个输入 流中随机取得m个记录
题目:有一个很大很大的输入流,大到没有存储器可以将其存储下来,而且只输入一次,如何从这个输入流中随机取得m个记录分析:这题在soso面试的时候也见过,当时没有答出来。现在也每想出好的办法。网上看到一种方法:每次输入一个记录时,随机产生一个0到1之间的随机数,用这些随机数维护一个大小为m的堆。但是这种方法是否是后面的输入的纪录被选取的概率要比前面要原创 2014-03-22 18:23:41 · 2527 阅读 · 12 评论 -
6. 微软面试题:判断俩个链表是否相交
链表假设是单链表,这题需要找到相交的特征,相交后,最后一个节点肯定相同,所以,如果相同则是相交,否则不相交。下面看看实现:#includeusing namespace std;struct LNode{ LNode(int _d = 0):data(_d),next(NULL) {} int data;原创 2014-03-07 22:50:54 · 1078 阅读 · 2 评论 -
32. 百度面试题:用天平(只能比较,不能称重)从一堆小球中找出其中唯一一个较轻的,使用x次天平,最多可以从y个小球中找出较轻的那个,求y与x的关系式
题目:用天平(只能比较,不能称重)从一堆小球中找出其中唯一一个较轻的,使用x次天平,最多可以从y个小球中找出较轻的那个,求y与x的关系式。分析:这题我面试得时候碰到过,不知是腾讯的面试,还是百度的面试,那个题比较具体,比如有10个球,最少需要几次能找到最轻的球。之前的相法是分成两拨,称称,轻的球肯定在轻的那拨里面,这样二分直到找到那个轻的球。后面在网上看到还有更原创 2014-03-22 18:16:43 · 6356 阅读 · 0 评论 -
31. 百度面试题:有n个长为m+1的字符串
题目:有n个长为m+1的字符串, 如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接,问这n个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误分析:题外话:这段时间以来,做了30多面试题,现在越来越有感觉,对题的思路越来越清晰,并且很多基本的数据结果和算法都比较熟。继续做下去,为了心中的梦想。。。这题可以联想到有向图的概念,字原创 2014-03-22 09:02:11 · 1538 阅读 · 0 评论 -
40. 网易面试题:和为n连续正数序列(数组)
网易面试题:和为n连续正数序列(数组)题目:输入一个正数n,输出所有和为n连续正数序列。例如:输入15,由于 1+ 2 + 3 + 4 +5 = 4 + 5 + 6 = 7 + 8 = 15, 所以输入3个连续序列1,2,3,4,5 和 4,5,6 和7,8。分析:找连续序列可以从2个开始找,再找3个,4个等等,那到什么时候结束呢?当发现找到的原创 2014-05-14 20:06:14 · 1033 阅读 · 0 评论 -
41. 百度面试题:字符串的排列(字符串)
题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a, b, c 所能排列出来的所有字符串abc, acb, bac, bac, cab和cab。分析:这题主要考递归思想。依次取出每个字符,剩下的字符的字符串所有排列都打印出来,再加上开始的字符。实现:#include#include#include#inclu原创 2014-05-14 23:18:14 · 1042 阅读 · 2 评论 -
43. 百度面试题:最长公共子序列
题目:如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,则字符串一称之为字符串二的子串。注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中。请编写一个函数,输入两个字符串,求它们的最长公共子串,并打印出最长公共子串。例如:输入两个字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它们的最长公共子串,则输出它们的长度4,并打印任意一个子串。原创 2014-05-21 20:26:05 · 1008 阅读 · 0 评论 -
编程之美题之电话号码对应英文单词
题目:电话的号码盘一般可以用于输入字母,如用2可以输入A,B,C,用3可以输入D,E,F等,对于号码5869872可以依次输出其代表的所有的字母组合。解法一:直接循环法:#include#includeusing namespace std;#define TelLength 3int main(){ char c[10][10]= { "",原创 2015-02-20 13:43:39 · 1235 阅读 · 1 评论 -
微信群红包算法
今天是春节的最后一天上班,没什么事情,正好群里面的同学再讨论群红包的算法。特写了个算法。大致思路是找发过的红包,寻找它的随机震动坡度。下面来看看算法吧:#coding=gbkimport randomimport sys#print random.randint(0, 99)#print "====", random.uniform(0, 0.99)def ca原创 2015-02-17 14:51:52 · 3621 阅读 · 0 评论 -
各种字符串hash函数的效果对比
转载地址:https://www.byvoid.com/zhs/blog/string-hash-compare各种字符串Hash函数比较常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法。这些函数使用位运算使得每一个字符都对最后的函数值产生影响。另外还有以MD5和SHA1为代表的杂凑函数,这些函数几乎不可能找到碰撞。常用字转载 2015-02-15 12:00:11 · 496 阅读 · 0 评论 -
47. 腾讯面试题: 用两个栈实现队列
题目:某队列的声明如下:templateclass Stack;templateclass CQueue{public: CQueue(){} ~CQueue(){} void appendTail(const T& node); void deleteHead(); void pop(T& n原创 2014-06-06 22:49:15 · 1079 阅读 · 0 评论 -
51. 腾讯面试题:一个二叉树,中序遍历,找一个节点的后一个节点
题目:一个二叉树,中序遍历,找一个节点的后一个节点原创 2014-08-19 10:50:24 · 2359 阅读 · 7 评论 -
51. 某公司的面试题:100个人去按100个灯,每个人只能按它顺序的倍数的灯
题目:100个灯开始都是关着,现在有100个人去按100个灯,每个人只能按它顺序的倍数的灯,比如:100个人的顺序编号为1,2,3,。。。1 只能按1的倍数的灯,所有的灯都按一遍2只能按2的倍数的灯,既2,4,6,8,。。。3只能按3的倍数的灯,既3,6,9,。。。。。。所有人都按完,哪些灯是关着的,哪些是开着?分析:这题如果按照计算机的思维,可以遍历一遍,原创 2014-09-05 22:19:29 · 3454 阅读 · 0 评论 -
49. 搜狗面试题: 大数相乘算法
分析:大数能大到整形类型存储不了,需要借助于其他的算法,来完成乘法运算。可以使用口算乘法的步骤来模拟乘法操作,如下: 123 * 122= 3 4 6 + 3 4 6 +原创 2014-08-07 16:17:00 · 1557 阅读 · 0 评论 -
48. 搜狗面试题:从尾到头输出链表
题目:输入一个链表(无环单链表)的头结点,从尾到头反过来输出每个结点的值。链表结点定义如下:typedef struct listNode{ struct listNode* next; int data;}Node;分析:这题我有两种思路,一种:是常规思路,把链表逆过来,再遍历。还有一种:借助于栈来实现(使用栈的先进后出的特点)。不过后原创 2014-06-07 18:44:29 · 943 阅读 · 0 评论 -
44. 腾讯面试题: 使用函数的参数指针,分配内存空间问题
面试官写了一段程序:void fun(int* a){ a = new int[100]; cout << a << endl;}int main(){ int *a; fun(a); a[1]= 0; fun(a);}这个程序有问题吗?答: 有问题。原创 2014-05-28 20:21:30 · 2490 阅读 · 0 评论 -
45. 腾讯面试题: 使用hashmap 插入数据,怎么样按照插入数据的顺序输出数据
题目:使用hashmap 插入数据,怎么样按照插入数据的顺序输出数据分析:使用hashmap插入数据,数据的顺序会改变。可以写个小程序试试。那怎么样按照插入的顺序输出呢?方法一:这是我第一时间想出来的办法: 维护一张表,存储数据插入的顺序,可以使用vector。但是如果删除数据呢,首先得在vector里面找到那个数据,再删除,而删除又要移动大量数据。性能效率很低原创 2014-05-28 23:08:56 · 5075 阅读 · 0 评论 -
46. 谷歌面试题:寻找丑数
题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数。分析:这是一道在网络上广为流传的面试题,据说google曾经采用过这道题。这段题刚开始的想法是从1开始递增遍历,找出1500个是丑数的数,并打印出来。实现如下:原创 2014-06-04 07:59:39 · 1545 阅读 · 15 评论 -
29. 微软面试题:求一个矩阵中最大的二维矩阵(元素和最大)
题目:求一个矩阵中最大的二维矩阵(元素和最大).如:1 2 0 3 42 3 4 5 11 1 5 3 0中最大的是:4 55 3要求:(1)写出算法;(2)分析时间复杂度;(3)用C写出关键代码分析:直接遍历二维数组,求出最大的二维数组就OK了实现如下:#includeusing namespace std;int max_ma原创 2014-03-20 23:27:36 · 1278 阅读 · 0 评论 -
28. 微软面试题:使用多线程实现一个队列
题目:实现一个队列队列的应用场景为:一个生产者线程将int类型的数入列,一个消费者线程将int类型的数出列。分析:首先得设计一个队列,并且最好是循环队列,否则队列里面的空间很容易一下就使用完了。题目要求使用生产者线程和消费者线程,所以得设计成线程保护,否则取数据和推送数据很容易搞错。可以使用线程的互斥变量:pthread_mutex_t加pthread_mutex_原创 2014-03-20 21:06:04 · 1590 阅读 · 0 评论 -
37. 20140329 蓝汛社招面试题
今天有朋友去蓝汛通讯技术面试云平台的后端开发,目前云平台还是个新部门,在大规模的招聘中,今天就有一轮大规模招聘。当然我不知道什么时候开始,什么时候结束l了,哈哈!就面了两面,下面介绍下大概的面试题目:一面1. 介绍下你做的项目。介绍完后,面试官就问些项目的情况,他所感兴趣的方面?答: 这个问题社招一般都会问到,一般我公司面试的时候,我也会问,一是了解下对方的背景,二是原创 2014-03-30 19:42:42 · 2531 阅读 · 1 评论 -
9. 微软面试题:求二叉树中节点间最大距离
如果我们把二叉树看成一个图,父子节点间的连线看成是双向的,我们姑且定义“距离”为两节点之间边的个数。写一个程序,求一颗二叉树中相距最远的两个节点之间的距离。例如:二叉树为: 1 / \ 2 3 \ 4/ 5则两点间最大的距离为5实现如下:#includeu原创 2014-03-08 22:54:38 · 1230 阅读 · 4 评论 -
20. 微软面试题:单链表就地逆置
题目是:链表操作,单链表就地逆置分析:这题只需要设置三个指针就搞定了,ListNode* p 表示当前指针, ListNode* fp: 上一个节点指针, ListNode * ep :下一个节点指针p ->next = fp;fp = p;p = ep ep = p->next;具体实现如下:#includeusing namespace st原创 2014-03-13 01:16:19 · 1263 阅读 · 0 评论 -
8. 微软面试题:翻转句中的英文单词的顺序
题目是:输入一段英文句子,翻转句子中的英文单词顺序,注意:单词内字符顺序不变。分析:单词间分隔是以空格为间隔,这样以单词为顺序的逆序就可以了。为简单之间,其他标点符号当普通字符处理。例如:输入“I am a student.",则输出为:“student. a am I"。下面来看实现:#include#include#include#includ原创 2014-03-08 15:28:41 · 1074 阅读 · 0 评论 -
18. 微软面试题:输入一个表示整数的字符串,把该字符串转换成整数并输出
题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串"345",则输出整数345。分析:可以直接使用atoi函数, 但这个题目显然不希望你这么做我们还是按照常规方法来做,比如整数字符串长度为n= strlen(str)。最右边的为个数,往左依次是十位,百位等。右边---左边0 1 2 ...比原创 2014-03-11 20:33:39 · 2180 阅读 · 0 评论 -
19. 中兴面试题:输入两个整数n和m, 从数列1,2,...,n中任意选择几个数,使其和等于m, 要求编写程序输出所有的组合
2010年中兴面试题编程求解:输入两个整数 n 和 m,从数列1,2,3.......n中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来.分析:可以使用递归思想, 从第n个数开始找其组合,1)包括n的所有组合2)不包括n的所有组合把所有组合整合起来就OK了。下面来看具体的实现:#include#include#in原创 2014-03-12 13:32:22 · 2901 阅读 · 0 评论 -
17. 微软面试题:用最快的方法计算出 Fibonacci数列中的第n项
这题可以参考Zyearn的博客(斐波那契数列的几种计算机解法):http://blog.csdn.net/zyearn/article/details/7878657使用通项公式的方式,算法复杂度为o(1),应该是最快的。先看下Fibonacci数列的定义:使用通项公式的概念,可以得到:使用矩阵计算可以得到:原创 2014-03-11 20:03:40 · 3472 阅读 · 1 评论 -
5. 微软面试题: 查找最小的k个元素(数组)
题目:输入n个整数,输出其中最小的k个。例如输入7,2,4,5,1,3,6,8这8个数字,则最小的4个数字为1,2,3和4。下面使用快速排序和分治法的思想,1)先找选一个元素a遍历一次剩余的其他元素,使得a左边的元素都是小于它的,a右边的元素都是大于它的。2)再统计a 左边的元素或者包括a 与 k的关系,等于的话,就直接输出,大于,那就在左边里面继续1),小于的话,那就原创 2014-03-06 19:58:53 · 1082 阅读 · 0 评论 -
4. 微软面试题: 在二元树中找出和为某一值的所有路径(树)
题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如 输入整数22和如下二元树 10 / / 5 12 / \ 4 7则打印出两条路径:10, 12和10, 5, 7。#include #include using nam原创 2014-03-06 11:11:32 · 891 阅读 · 0 评论 -
3 微软面试题:求子数组的最大和,并找出此子数组
题目描述:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。下面有个算法时间复杂度为O(n)#include原创 2014-03-06 00:01:50 · 1290 阅读 · 0 评论 -
2. 微软面试题:设计包含min函数的栈(栈)
题目:设计包含min函数的栈(栈)定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。 要求函数min、push以及pop的时间复杂度都是O(1)。这个题的关键是设计min时间复杂度为O(1)的函数,通常min函数的复杂度为O(n)。可以使用空间换时间的策略,加一个栈来维护min函数值,每一次pop栈,min函数对应的栈也相应进行操作。原创 2014-03-05 18:08:40 · 966 阅读 · 0 评论 -
1. 微软面试题:把二元查找树转变成排序的双向链表(树)
微软面试题集100题之1:把二元查找树转变成排序的双向链表(树)原创 2014-03-04 20:43:23 · 1701 阅读 · 0 评论