面试题
文章平均质量分 76
Raise
记录下来的目的主要是为了加深自己的理解,如果还能对一两个人起到抛砖引玉的作用,就再高兴不过了。
展开
-
[面试中的算法]把二元查找树转变成排序的双向链表
题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向比如二叉搜索树:输出应为: 3, 4, 5, 10, 11, 12, 13:分析:处理树状结构很容易想到递归,而二叉搜索树其实恰好是已经排序好的一个结构,而要把它变成链接,只需“中序遍历”即可: 3,4,5,10,11,12,13,中序遍历每访问到一个节点的时候,需要原创 2013-07-15 11:55:48 · 1464 阅读 · 0 评论 -
编程之美将帅不照面
编程之美上的一道题:要求将帅不能照面,找到有多少种方式摆放“将”和“帅”,而且只能使用一个变量。思考:如果蛮力法解决,只需要罗列出所有的可能性,然后排除掉那些不满足条件的情况就是结果了。但是,这里只能用一个变量保存结果,所以,需要一点技巧,先说一下《编程之美》是的解法2,因为解法2是最精妙的,个人认为,提供了一种新型的思考方式。先给出将帅在棋局的分布,有一个感观的认识再继续下面的操作:原创 2013-10-20 21:06:09 · 1626 阅读 · 0 评论 -
合并两个排序好的链表/链表去重/链式快排
合并两个已经排好序的链表:递归方式:如果其中一个链表为空,则直接返回第二个链表,如果第二个链表为空,则返回第一个链表。如果两个链表都不为空,则判断两个链表的表头大小,小值当作合并链表的头结点MergeHead,然后,后面的问题也是新的子问题,递归调用即可,具体可以看代码体会。非递归方式:如果其中一个链表为空,则直接返回第二个链表,如果第二个链表为空,则返回第一个链表。如果两个链表都不为空,...原创 2018-12-30 11:23:13 · 4172 阅读 · 0 评论 -
C++/C试题
C++/C试题一、请填写BOOL ,float, 指针变量 与“零值”比较的 if 语句。(10分) 请写出 BOOL flag 与“零值”比较的 if 语句。(3分)标准答案: if ( flag ) if ( !flag )如下写法均属不良风格,不得分。 if (flag == TRUE)原创 2013-10-29 00:43:09 · 1950 阅读 · 0 评论 -
求平方根sqrt()函数的底层算法效率问题(转载)
http://www.nowamagic.net/algorithm/algorithm_EfficacyOfFunctionSqrt.php求平方根sqrt()函数的底层算法效率问题2010-10-06我们平时经常会有一些数据运算的操作,需要调用sqrt,exp,abs等函数,那么时候你有没有想过:这个些函数系统是如何实现的?就拿最常用的sqrt函数来说吧,系统怎么来原创 2013-10-27 15:45:05 · 3070 阅读 · 0 评论 -
面试总结,多进程和多线程的区别
原文链接:http://blog.csdn.net/bing_bing/article/details/8093552关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”。这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有那么简单了,选的不好,会让你深受其害。所以他也是面试者最喜欢考察的题目之一。我们按照多个不同的维度,来看...原创 2018-12-30 11:20:15 · 48539 阅读 · 8 评论 -
Union和Struct的内存分配
http://www.2cto.com/kf/201106/92935.html嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。采用Little-endian模式的CPU对操作数的存放方式是从低字节到高字节,而Big-endian模式对操作数的存放方式是从高字节到低字节。也就是说Big-endian模式符合人的习惯,而Little-endian更加方原创 2013-10-19 11:36:17 · 1554 阅读 · 0 评论 -
各大IT公司面试题
百度2道面试题:一、有一个桶,里面有白球,黑球各100个,人们必须按照以下的规则把球取出来:1.每次从桶里面拿出来两个球.2.如果是两个同色的球,就再放入一个黑球.3.如果是两个异色的球,就再放入一个白球.问,最后桶里面只剩下一个黑球的概率是多少?http://blog.csdn.net/linraise/article/details/13093759思路1.如果原创 2013-10-27 00:16:25 · 2585 阅读 · 0 评论 -
微软:求最大连续递增数字串/时钟问题
11、求最大连续递增数字串(如“ads3sl456789DF3456ld345AA”中的“456789”)思路:记录当前最长长度CurMaxLen和当前最长数字串的开始索引Begin.和全局最长长度Max比较,如果当前长度更长,则更新Max和全局开始索引。直至到结尾。#includeusing namespace std;void LongestIncreaseStr(char*原创 2013-09-23 14:10:30 · 1944 阅读 · 0 评论 -
HDU1710利用二叉树的先序和中序输出后序
http://acm.hdu.edu.cn/showproblem.php?pid=1710Binary Tree TraversalsTime Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2786 Accepted S原创 2013-11-13 01:59:44 · 1453 阅读 · 0 评论 -
微软过桥问题Dijkstra/倒水问题
微软过桥问题 微软的过桥问题:4个人在晚上过一座小桥,过桥时必须要用到手电筒,只有一枚手电筒,每次最多只可以有两人通过, 4个人的过桥速度分别为1分钟、2分钟、5分钟、10分钟,试问最少需要多长时间4人才可以全部通过小桥?思路:刚一看到这道题,思路比较狭窄,就拿着笔把人移过来再移过去,第一次做出的答案是19(错误答案).后来上网上去找参考答案,发现是17.网上的答案只给出得到17分钟...原创 2018-12-30 11:23:26 · 19012 阅读 · 1 评论 -
二叉树
序:二叉树作为树的一种,是一种重要的数据结构,常见的二叉树有:满二叉树:除叶子结点外,所有结点都有两个结点,叶子结点的left,right为NULL.哈夫曼树:又称为最优二叉数,是一种带权路径最短的树。哈夫曼编码就是哈夫曼树的应用,可以用来进行编码压缩.哈夫曼树的构造见哈夫曼树的构造完全二叉树:除了最底层的叶子结点之外,其余层全满,而且叶子层集中在左端.堆是一种特殊的完全二叉树(全满或者差一...原创 2018-12-30 11:25:01 · 31440 阅读 · 4 评论 -
子数组的最大和[算法]HDU1003/HDU1231/找到这些数使得它满足:它是左边的最大值且是右边的最小值
题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。要求最大的子数组的和.我们可以想象,当遍历到其中一个数A[i],如果A[i]之前原创 2013-08-07 11:09:03 · 1941 阅读 · 0 评论 -
卡特兰-HDU1515-HDU2067
题目:一个栈的入栈序列是A、B、C、D、E,则栈的不可能的输出序列()A、EDCBA B、DECBA C、DCEAB D、ABCDE题目从手工操作方面比较容易理解,需要借用一个辅助栈,先理一遍思路:先看B答案:(0)实始态入栈序列是ABCDE i出栈序列是CDBEA j栈:|-...原创 2018-12-30 11:24:31 · 13781 阅读 · 0 评论 -
归并排序-求逆序数算法
归并排序一直以为比较简单,不算特别重视,今天试着写了一下,很尴尬,失败了几次.最后还是决定写博记录一下.废话不多说,直接进正题. 算法:归并排序是分治法(分而治之)的一种典型应用,应用递归的思想,自顶向下思考:先假定MergeSort()可以将一个乱序的数组排好序,因此就可以开始"分"(将一个数组平均分成两部分),再"治"(分别对前后部分调用MergeSort()使它们有序),最后再...原创 2018-12-30 11:25:29 · 17541 阅读 · 0 评论 -
游戏之趣24点:HDU1427
速算24点Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2608 Accepted Submission(s): 621Problem Description速算24点相信绝大多数人都玩过。就是随机给你四原创 2013-11-25 21:10:35 · 2003 阅读 · 0 评论 -
腾讯一道面试题
28)给定一数组a[N],我们希望构造数组b [N],其中b[j]=a[0]*a[1]…a[N-1] / a[j],在构造过程中,不允许使用除法:要求O(1)空间复杂度和O(n)的时间复杂度;除遍历计数器与a[N] b[N]外,不可使用新的变量(包括栈临时变量、堆空间和全局静态变量等);实现程序(主流编程语言任选)实现并简单描述。先忽略题目所给的任何限制,天马行空想象一下,能想象到什么解法...原创 2018-12-30 11:25:10 · 7287 阅读 · 0 评论 -
桶中取黑白球(编程之美)
原创 2013-10-26 14:41:33 · 1959 阅读 · 0 评论 -
根据前序遍历和中序遍历,重构出二叉树
题目:这道题目是一道面试题,先序遍历和中序遍历以数组的形式给出,要求我们根据这两个条件重构出二叉树。下图是一棵二叉树// 6// / \// 5 7 // / \ \// 2 4 8先序遍历:6,5,2,4,7,8中序...原创 2018-12-30 11:26:06 · 4321 阅读 · 0 评论 -
全排序vs八皇后问题vs三角八皇后
假设要求字符串/数组的全排序,例如:"123"的全排序,第1位有3种选择,第2位有2种选择,第3位1种选择,时间复杂度显然是3!.实际上容易知道,对于n个字符,全排序一共有n!种可能,是n!时间复杂度的.我们需要找一个算法求出所有的可能的排序,最好的办法是递归,如果选用循环,需要n层嵌套,不太现实.假设我们已经拥有一个函数 FullPermutation(A[n])能将数组A[n]全排序,于...原创 2018-12-30 11:25:17 · 18951 阅读 · 0 评论 -
不用+,-,x,/做加法运算
废话少说,直接上例子。例如要算14+8的和,平常的思维方式,4+8得2进1,1+1得2不进位,结果就是22.思维方式就是自右往左,边加边求和,再进位,再重复以上步骤。但是,现在限制住了加减乘除,剩下的只有与或非了。于是加可用异或,求进位可用与,重复上述步骤直到结果正确即可。改进一下,我们可分为三步走:1,整体求和(异或)2,整体求进位(与)3,重复以上步骤(循环或递归)C++代原创 2013-07-23 12:48:09 · 1504 阅读 · 0 评论 -
数组中找出两个只出现一次的数字
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。思路:题目要求时间复杂度是O(n),空间复杂度是O(1),这说明基于比较的办法求解无法完成,这题需要异或的性质,异或(同为0,异为1,相当于不进位加法)因为其它数都出现两次,当扫描完一次之后,将所有的数做异或,那些相同的数都会变成0,结果是两个不...原创 2018-12-30 11:26:13 · 3927 阅读 · 0 评论 -
C++的const和引用只能在初始化列表里初始化而不能在构造函数体内赋值初始化
class ConstRef{public: ConstRef( int ii );private: int i; const int ci; int &ri;};ConstRef::ConstRef( int ii ){ i = ii; ci = ii; ri = i;}ConstRef::ConstRef( int ii ): i(ii), ci(ii), ri(原创 2013-07-24 16:33:36 · 3533 阅读 · 0 评论 -
用两个栈实现一个队列:实现出队列和入队列功能,用两个队列实现一个栈
思路:用两个栈来模仿队列,就是要用两个后进先出的数据结构来实现先进先出的功能。举个简单的例子:(用#代表栈底,->表示队列的方向)初始状态:可以知道,这是可行的,如果需要出队列,只需要stack1不停弹栈即可stack 1: #4,3,2,1stack 2: #queue:4,3,2,1->此时如果需要入队列,那么队列就应该是这样子:queue : 5,4,3,2,1->原创 2013-07-27 20:36:04 · 2701 阅读 · 0 评论 -
查找单链表中倒数第k个结点||旋转单链表
思路:由于是单链表,没有办法先通过遍历到最末尾,然后,回朔k个结点(k从1开始数起)的办法解决。还可以通过一个低效的办法做到,先遍历一次确定链表的总数n,第二次遍历时,遍历到n-k+1位置时即可。但是这样需要扫描链表两次。还有一个高效的办法,就是管理两个指针,前边的指针先行k个结点,然后两个指针同步前移,当前边的指针到达末尾时,后面的指针刚好是倒是k个结点。#includeusi原创 2013-07-28 14:28:49 · 1334 阅读 · 0 评论 -
定义栈的数据结构在Theta(1)时间复杂度内实现min,pop,push操作
思路:push,pop操作在常量时间复杂度内完成,没有问题,但是,min操作需要在常量时间复杂度内完成,一开始很容易想到在栈中保存一个变量min,用来保存最小值,那么如果需要min()操作时,只需要查min变量的值即可.这个思路看起来不错,但是,有一个致命的缺陷,那就只是,只保存一个min变量,那么当min也需要弹栈的时候,那么栈中的min也需要用次二小的值更新,但是,此时无法知道第二个小值是原创 2013-07-29 17:58:47 · 2114 阅读 · 0 评论 -
微软面试题:编程实现两个正整数的除法,当然不能用除法操作符。
思路比较简单,效率似乎并不太理想,先放在这里,以后再改良.#includeusing namespace std;int Div1(int x, int y)//若x >>> y(远大于)时,效率差{ int ans = 0; while(x >= y) { x -= y; ++ans; } return ans;原创 2013-08-06 18:26:16 · 1625 阅读 · 0 评论 -
实现一个栈,使push,pop,min操作只需要o(1)时间
思路: push,pop操作在常量时间复杂度内完成,没有问题,但是,min操作需要在常量时间复杂度内完成,一开始很容易想到在栈中保存一个变量min,用来保存最小值,那么如果需要min()操作时,只需要查min变量的值即可.这个思路看起来不错,但是,有一个致命的缺陷,那就只是,如果只保存一个min变量,那么当min也需要弹栈的时候,那么栈中的min也需要用次二小的值更新,但是,此原创 2013-08-07 10:51:58 · 3806 阅读 · 0 评论 -
微软一道面试题
一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。 请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。 注意: - 5个数值允许是乱序的。比如: 8 7 5 0 6 - 0可以通配任意数值。比如:8 7 5 0 6 中的0可以通配成9或者4 - 0可以多次出现。原创 2013-08-09 22:21:31 · 1409 阅读 · 0 评论 -
腾讯面试题,给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数
题目:给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数要求下排每个数都是先前上排那十个数在下排出现的次数。上排的十个数如下:【0,1,2,3,4,5,6,7,8,9】举一个例子,数值: 【 0,1,2,3,4,5,6,7,8,9 】分配: 【 6,2,1,0,0,0,1,0,0,0 】0在下排出现了6次,1在下排出现了2次,2在下排出现了1次,3在下排出现了...原创 2018-12-30 11:24:39 · 6598 阅读 · 4 评论 -
啊哈!算法:三个算法问题(左旋转,大数据,变位词集)
无意中找到一本书《编程珠玑》,刚看到第二章,感觉作者讲解方式比较独特并且很有意思,在这里记录第二章的三个问题,以下是这三个问题。三个问题 A.给定一个包含32位整数的顺序文件,它至多包含40亿个这样的整数,并且整数的次序是随机的,请查找一个此文件中不存在的32位整数(至少必有一个遗漏,为什么?)。在有足够内存的情况下,你会如何解决这个问题?如果可以使用若干外部临时文件但可用主存却只有上...原创 2018-12-30 11:23:06 · 23757 阅读 · 0 评论 -
360笔试题2013:牧师(传道士)与野人过河问题
文章转自:点击打开链接。在开头写上原创是由于我觉得绿色的标题比转载的灰色标题显眼(个人爱好),如果有对原作者冒犯,在此道歉。编程题、传教士人数M,野人C,M≥C,开始都在岸左边,①船只能载两人,传教士和野人都会划船,当然必须有人划船②两岸边保证野人人数不能大于传教士人数 把所有人都送过河,设计一方案,要求编程实现。 根据以往的一些经验,比如:走楼梯问题(一次可以走一步或者两原创 2013-09-08 21:36:58 · 6544 阅读 · 0 评论 -
反转链表非递归/递归d
题目:输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。(a)为链表,(b)为反转后的链表。假设当前指针为i,则我们需要将i->next=h.此时i和j之间会断裂,因此,我们需要另一个指针j去指示j的位置,同时i->next=h中的h也需要记录,因此,要反转一个链表需要用到3个指针同步向前遍历,基于这个思路,可以轻松写出下面的程序,唯一需要注意的是空指针的情况,越界的情况。原创 2013-09-07 16:20:34 · 1545 阅读 · 0 评论 -
[软件笔试] 2014暴风影音校招技术笔试题(长春站)
试题来源:http://www.itmian4.com/forum.php?mod=viewthread&tid=3622&extra=page%3D11.升序排列下列数值:(101001)2,(40)10,(23)8,(18)16解:个人理解,全统一到某一进制,如10进制数,再进行比较。2.写出下列函数的返回值int func(int x=300){原创 2013-10-03 05:53:20 · 3232 阅读 · 0 评论 -
工场outing
工场outing创新工场家族成员每年会组织一次旅行,公司的hr为了安排旅行路线伤透脑筋, 因为公司party会场被安排到一个景点B, 而大家的宾馆被安排在了另-个景点A。而景点A和景点B之间有若干个景点No .. Ni。 每个旅游景点大家最多只玩一次. 同时每个旅游素点都有一个评分X, 景点之间会有公路相连, 大家都不喜欢走回头路. 所以每条公路只能走一次。 请帮助hr设计一条路线P,原创 2013-09-22 18:30:52 · 1470 阅读 · 0 评论 -
HDU1081二维子数组最大和/压缩/动态规划/DP
http://acm.hdu.edu.cn/showproblem.php?pid=1081To The MaxTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 6892 Accepted Submission(s)原创 2013-11-15 22:27:11 · 1963 阅读 · 0 评论