资源描述:
《常见算法面试题.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、常见算法面试题1.把二元查找树转变成排序的双向链表
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/
614
//
481216
转换成双向链表
4=6=8=10=12=14=16。
首先我们定义的二元查找树节点的数据结构如下:
structBSTreeNode
{
intm_nValue;//valueofnode
BSTreeNode*m_之pLeft;//lef仗tchildofnod蛮e
BSTreeNo椰de*m_pR
2、ight衷;//rightchi医ldofnode
};
2酋.设计包含min函数的揪栈。
定义栈的数据结酸构,要求添加一个min锗函数,能够得到栈的最小淫元素。
要求函数mi益n、push以及pop冒的时间复杂度都是O(1攘)。
3.求子数组的最大莱和
题目:
输入一个整形数涯组,数组里有正数也有负雍数。
数组中连续的一灰个或多个整数组成一个子绽数组,每个子数组都有一争个和。
求所有子数组纠的和的最大值。要求时间壤复杂度为O(n)。
邢例如输入的数组为1,-谢2,3,10,-4,7骋,2,-5,和最大的子
3、饰数组为3,10,-4,给7,2,
因此输出为该子汛数组的和18。
4.在二楔元树中找出和为某一值的肤所有路径
题目:输入一个障整数和一棵二元树。
曾从树的根结点开始往下访诉问一直到叶结点所经过的菜所有结点形成一条路径。雅
打印出和与输入整数相等逮的所有路径。
例如输入整茎数22和如下二元树
10书
/
512
/
47
则打种印出两条路径:10,1清2和10,5,7。
二元圭树节点的数据结构定义为客:
structBi同naryTreeNod醒e//anodeint档hebinarytre逾e
{
intm_
4、nV营alue;//valu趋eofnode
Bi詹naryTreeNod肆e*m_pLeft;/尸/leftchildo庆fnode
Bina心ryTreeNode*要m_pRight;//艳rightchildo癣fnode
};
5.查找斗最小的k个元素
题目:输全入n个整数,输出其中最荤小的k个。
例如输入瘪1,2,3,4,5,6稳,7和8这8个数字,则邢最小的4个数字为1,2恤,3和4。
第6题
腾讯面毖试题:
给你10分钟绢时间,根据上排给出十个搜数,在其下排填出对应的逼十个数
要求下排每个仲数
5、都是先前上排那十个数逻在下排出现的次数。
上排簧的十个数如下:
【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在下排出平现了0次....
以此类级推..
第7题
微软亚院之纳编程判断俩个链表是否相校交
给出俩个单向链表爷的头指针,比如h1,h快2,判断这俩个链表是否表相交。
为了简化问题,我粥们假设俩个链表均不带环圆。
问
6、题扩展:
1.如果链式表可能有环列?
2.寓如果需要求出俩个链表相励交的第一个节点列?
第8谢题
此贴选一些比较怪粉的题,,由于其中题目本渝身与算法关系不大,仅考皑考思维。特此并作一题。诣
1.有两个房间,一瞒间房里有三盏灯,另一间三房有控制着三盏灯的三个工开关,
这两个房间是址分割开的,从一间里不能蓉看到另一间的情况。
苗现在要求受训者分别进这斜两房间一次,然后判断出氧这三盏灯分别是由哪个开动关控制的。
有什么办法呢侩?
2.你让一些人为萧你工作了七天,你要用一丘根金条作为报酬。金条被谱分成七小块,每
7、天给出一死块。
如果你只能将金徒条切割两次,你怎样分给扎这些工人?
3.★用晾一种算法来颠倒一个链接叛表的顺序。现在在不用递邢归式的情况下做一遍。
亢 ★用一种算法在一个循署环的链接表里插入一个节汛点,但不得穿越链接表。寄
★用一种算法整理一渔个数组。你为什么选择这澈种方法?
★用一种算法使阔通用字符串相匹配。
★颠赴倒一个字符串。优化速度毡。优化空间。
★颠倒驭一个句子中的词的顺序,庭比如将“我叫克丽丝”转俞换为“克丽丝叫我”,
实朝现速度最快,移动最少。橙
★找到一个子字符串。优蹄化速度。优化空间。
8、硒★比较两个字符串,用O寄(n)时间和恒量空间。吴
★假设你有一个用1栖001个整数组成的数组仑,这些整数是任意排列的眯,但是你知道所有的整数吁都在1到1000(包括曳1000)之间。此外,汛除一个数字出现两次外,宜其他所有数字只出现一次尝。假设你只能对这个数组与做一次处