[整理III]微软等数据结构+算法面试100题[最新第61-80题]
?
??? 精選微軟等數(shù)據(jù)結(jié)構(gòu)+算法面試100題[第61-80題]
??????????????????????? ??--最新整理公布
?
?
?
?
昨日,11.19,最新整理了,第61-80題,現(xiàn)在公布。
??????????
可以這么說(shuō),絕大部分的面試題,都是這100道題系列的翻版,
此微軟等公司數(shù)據(jù)結(jié)構(gòu)+算法面試100題系列,是極具代表性的經(jīng)典面試題。
我曾經(jīng)暗暗問(wèn)自己,不知道我是否把面試題基本上都搜集整理盡了,
而當(dāng)然,對(duì)你更重要的是,我自個(gè)還提供了答案下載,提供思路,呵。
?
所以,這份資料+答案,在網(wǎng)上是獨(dú)一無(wú)二的。
閑不多說(shuō),接下來(lái),你可以盡情的享用了,朋友。?
?
?
現(xiàn)在首次公布整理的第61-80題(11.19最新整理公布):
---------------------------------------
[整理I]精選微軟等公司數(shù)據(jù)結(jié)構(gòu)+算法面試100題 [第1-40題]? (博文)
http://blog.csdn.net/v_JULY_v/archive/2010/10/27/5968678.aspx
[整理II]精選微軟等公司數(shù)據(jù)結(jié)構(gòu)+算法面試100題 [第41-60題]? (博文)
http://blog.csdn.net/v_JULY_v/archive/2010/10/29/5975019.aspx
[匯總I]精選微軟等公司數(shù)據(jù)結(jié)構(gòu)+算法面試100題[第1-60題匯總](博文)
http://blog.csdn.net/v_JULY_v/archive/2010/11/12/6004660.aspx
?
61.找出數(shù)組中兩個(gè)只出現(xiàn)一次的數(shù)字
題目:一個(gè)整型數(shù)組里除了兩個(gè)數(shù)字之外,其他的數(shù)字都出現(xiàn)了兩次。
請(qǐng)寫(xiě)程序找出這兩個(gè)只出現(xiàn)一次的數(shù)字。要求時(shí)間復(fù)雜度是O(n),空間復(fù)雜度是O(1)。
分析:這是一道很新穎的關(guān)于位運(yùn)算的面試題。
???
62.找出鏈表的第一個(gè)公共結(jié)點(diǎn)。
題目:兩個(gè)單向鏈表,找出它們的第一個(gè)公共結(jié)點(diǎn)。
鏈表的結(jié)點(diǎn)定義為:
struct ListNode
{
? int m_nKey;
? ListNode* m_pNext;
};
分析:這是一道微軟的面試題。
微軟非常喜歡與鏈表相關(guān)的題目,因此在微軟的面試題中,鏈表出現(xiàn)的概率相當(dāng)高。
?
63.在字符串中刪除特定的字符。
題目:輸入兩個(gè)字符串,從第一字符串中刪除第二個(gè)字符串中所有的字符。
例如,輸入”They are students.”和”aeiou”,則刪除之后的第一個(gè)字符串變成”Thy r stdnts.”。
分析:這是一道微軟面試題。在微軟的常見(jiàn)面試題中,與字符串相關(guān)的題目占了很大的一部分,
因?yàn)閷?xiě)程序操作字符串能很好的反映我們的編程基本功。
?
64. 尋找丑數(shù)。
題目:我們把只包含因子2、3和5的數(shù)稱(chēng)作丑數(shù)(Ugly Number)。
例如6、8都是丑數(shù),但14不是,因?yàn)樗蜃?。習(xí)慣上我們把1當(dāng)做是第一個(gè)丑數(shù)。
求按從小到大的順序的第1500個(gè)丑數(shù)。
分析:這是一道在網(wǎng)絡(luò)上廣為流傳的面試題,據(jù)說(shuō)google曾經(jīng)采用過(guò)這道題。
?
65.輸出1到最大的N位數(shù)
題目:輸入數(shù)字n,按順序輸出從1最大的n位10進(jìn)制數(shù)。
比如輸入3,則輸出1、2、3一直到最大的3位數(shù)即999。
分析:這是一道很有意思的題目。看起來(lái)很簡(jiǎn)單,其實(shí)里面卻有不少的玄機(jī)。
?
66.顛倒棧。
題目:用遞歸顛倒一個(gè)棧。例如輸入棧{1, 2, 3, 4, 5},1在棧頂。
顛倒之后的棧為{5, 4, 3, 2, 1},5處在棧頂。
?
67.倆個(gè)閑玩娛樂(lè)。
1.撲克牌的順子
從撲克牌中隨機(jī)抽5張牌,判斷是不是一個(gè)順子,即這5張牌是不是連續(xù)的。
2-10為數(shù)字本身,A為1,J為11,Q為12,K為13,而大小王可以看成任意數(shù)字。 ?
2.n個(gè)骰子的點(diǎn)數(shù)。
把n個(gè)骰子扔在地上,所有骰子朝上一面的點(diǎn)數(shù)之和為S。
輸入n,打印出S的所有可能的值出現(xiàn)的概率。
??
68.把數(shù)組排成最小的數(shù)。
題目:輸入一個(gè)正整數(shù)數(shù)組,將它們連接起來(lái)排成一個(gè)數(shù),輸出能排出的所有數(shù)字中最小的一個(gè)。
例如輸入數(shù)組{32, 321},則輸出這兩個(gè)能排成的最小數(shù)字32132。
請(qǐng)給出解決問(wèn)題的算法,并證明該算法。
分析:這是09年6月份百度的一道面試題,
從這道題我們可以看出百度對(duì)應(yīng)聘者在算法方面有很高的要求。
?
69.旋轉(zhuǎn)數(shù)組中的最小元素。
題目:把一個(gè)數(shù)組最開(kāi)始的若干個(gè)元素搬到數(shù)組的末尾,我們稱(chēng)之為數(shù)組的旋轉(zhuǎn)。
輸入一個(gè)排好序的數(shù)組的一個(gè)旋轉(zhuǎn),輸出旋轉(zhuǎn)數(shù)組的最小元素。
例如數(shù)組{3, 4, 5, 1, 2}為{1, 2, 3, 4, 5}的一個(gè)旋轉(zhuǎn),該數(shù)組的最小值為1。
分析:這道題最直觀的解法并不難。從頭到尾遍歷數(shù)組一次,就能找出最小的元素,
時(shí)間復(fù)雜度顯然是O(N)。但這個(gè)思路沒(méi)有利用輸入數(shù)組的特性,我們應(yīng)該能找到更好的解法。
?
70.給出一個(gè)函數(shù)來(lái)輸出一個(gè)字符串的所有排列。
分析:簡(jiǎn)單的回溯就可以實(shí)現(xiàn)了。當(dāng)然排列的產(chǎn)生也有很多種算法,去看看組合數(shù)學(xué),
還有逆序生成排列和一些不需要遞歸生成排列的方法。
印象中Knuth的<TAOCP>第一卷里面深入講了排列的生成。
這些算法的理解需要一定的數(shù)學(xué)功底,
也需要一定的靈感,有興趣最好看看。
?
71.數(shù)值的整數(shù)次方。
題目:實(shí)現(xiàn)函數(shù)double Power(double base, int exponent),求base的exponent次方。
不需要考慮溢出。
分析:這是一道看起來(lái)很簡(jiǎn)單的問(wèn)題。可能有不少的人在看到題目后30秒寫(xiě)出如下的代碼:
double Power(double base, int exponent)
{
? double result = 1.0;
? for(int i = 1; i <= exponent; ++i)
? result *= base;
? return result;
}
?
?
72.
題目:設(shè)計(jì)一個(gè)類(lèi),我們只能生成該類(lèi)的一個(gè)實(shí)例。
分析:只能生成一個(gè)實(shí)例的類(lèi)是實(shí)現(xiàn)了Singleton模式的類(lèi)型。
??
?
73.對(duì)策字符串的最大長(zhǎng)度。
題目:輸入一個(gè)字符串,輸出該字符串中對(duì)稱(chēng)的子字符串的最大長(zhǎng)度。
比如輸入字符串“google”,由于該字符串里最長(zhǎng)的對(duì)稱(chēng)子字符串是“goog”,因此輸出4。
分析:可能很多人都寫(xiě)過(guò)判斷一個(gè)字符串是不是對(duì)稱(chēng)的函數(shù),這個(gè)題目可以看成是該函數(shù)的加強(qiáng)版。
?
74.數(shù)組中超過(guò)出現(xiàn)次數(shù)超過(guò)一半的數(shù)字
題目:數(shù)組中有一個(gè)數(shù)字出現(xiàn)的次數(shù)超過(guò)了數(shù)組長(zhǎng)度的一半,找出這個(gè)數(shù)字。
分析:這是一道廣為流傳的面試題,包括百度、微軟和Google在內(nèi)的多家公司
都曾經(jīng)采用過(guò)這個(gè)題目。要幾十分鐘的時(shí)間里很好地解答這道題,除了較好的編程能力之外,
還需要較快的反應(yīng)和較強(qiáng)的邏輯思維能力。
?
75.二叉樹(shù)兩個(gè)結(jié)點(diǎn)的最低共同父結(jié)點(diǎn)
題目:二叉樹(shù)的結(jié)點(diǎn)定義如下:
struct TreeNode
{
? int m_nvalue;
? TreeNode* m_pLeft;
? TreeNode* m_pRight;
};
輸入二叉樹(shù)中的兩個(gè)結(jié)點(diǎn),輸出這兩個(gè)結(jié)點(diǎn)在數(shù)中最低的共同父結(jié)點(diǎn)。
分析:求數(shù)中兩個(gè)結(jié)點(diǎn)的最低共同結(jié)點(diǎn)是面試中經(jīng)常出現(xiàn)的一個(gè)問(wèn)題。這個(gè)問(wèn)題至少有兩個(gè)變種。
?
76.復(fù)雜鏈表的復(fù)制
題目:有一個(gè)復(fù)雜鏈表,其結(jié)點(diǎn)除了有一個(gè)m_pNext指針指向下一個(gè)結(jié)點(diǎn)外,
還有一個(gè)m_pSibling指向鏈表中的任一結(jié)點(diǎn)或者NULL。其結(jié)點(diǎn)的C++定義如下:
? struct ComplexNode
{
? int m_nValue;
? ComplexNode* m_pNext;
? ComplexNode* m_pSibling;
};
下圖是一個(gè)含有5個(gè)結(jié)點(diǎn)的該類(lèi)型復(fù)雜鏈表。
圖中實(shí)線箭頭表示m_pNext指針,虛線箭頭表示m_pSibling指針。
為簡(jiǎn)單起見(jiàn),指向NULL的指針沒(méi)有畫(huà)出。 ?
請(qǐng)完成函數(shù)ComplexNode* Clone(ComplexNode* pHead),以復(fù)制一個(gè)復(fù)雜鏈表。 ?
//圖,接下來(lái),自會(huì)補(bǔ)上。July、11.19.
分析:在常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)上稍加變化,這是一種很新穎的面試題。
要在不到一個(gè)小時(shí)的時(shí)間里解決這種類(lèi)型的題目,
我們需要較快的反應(yīng)能力,對(duì)數(shù)據(jù)結(jié)構(gòu)透徹的理解以及扎實(shí)的編程功底。
?
77.關(guān)于鏈表問(wèn)題的面試題目如下:
題一、 給定單鏈表,檢測(cè)是否有環(huán)。
? 使用兩個(gè)指針p1,p2從鏈表頭開(kāi)始遍歷,p1每次前進(jìn)一步,p2每次前進(jìn)兩步。
如果p2到達(dá)鏈表尾部,說(shuō)明無(wú)環(huán),否則p1、p2必然會(huì)在某個(gè)時(shí)刻相遇(p1==p2),從而檢測(cè)到鏈表中有環(huán)。
?
題二、 給定兩個(gè)單鏈表(head1, head2),檢測(cè)兩個(gè)鏈表是否有交點(diǎn),如果有返回第一個(gè)交點(diǎn)。
? 如果head1==head2,那么顯然相交,直接返回head1。
? 否則,分別從head1,head2開(kāi)始遍歷兩個(gè)鏈表獲得其長(zhǎng)度len1與len2,假設(shè)len1>=len2,
那么指針p1由head1開(kāi)始向后移動(dòng)len1-len2步,指針p2=head2,
下面p1、p2每次向后前進(jìn)一步并比較p1p2是否相等,如果相等即返回該結(jié)點(diǎn),
否則說(shuō)明兩個(gè)鏈表沒(méi)有交點(diǎn)。
?
題三、 給定單鏈表(head),如果有環(huán)的話請(qǐng)返回從頭結(jié)點(diǎn)進(jìn)入環(huán)的第一個(gè)節(jié)點(diǎn)。
? 運(yùn)用題一,我們可以檢查鏈表中是否有環(huán)。
? 如果有環(huán),那么p1p2重合點(diǎn)p必然在環(huán)中。從p點(diǎn)斷開(kāi)環(huán),方法為:p1=p, p2=p->next, ?
p->next=NULL。此時(shí),原單鏈表可以看作兩條單鏈表,一條從head開(kāi)始,另一條從p2開(kāi)始,
于是運(yùn)用題二的方法,我們找到它們的第一個(gè)交點(diǎn)即為所求。
題四、只給定單鏈表中某個(gè)結(jié)點(diǎn)p(并非最后一個(gè)結(jié)點(diǎn),即p->next!=NULL)指針,刪除該結(jié)點(diǎn)。
? 辦法很簡(jiǎn)單,首先是放p中數(shù)據(jù),然后將p->next的數(shù)據(jù)copy入p中,接下來(lái)刪除p->next即可。
題五、只給定單鏈表中某個(gè)結(jié)點(diǎn)p(非空結(jié)點(diǎn)),在p前面插入一個(gè)結(jié)點(diǎn)。
? 辦法與前者類(lèi)似,首先分配一個(gè)結(jié)點(diǎn)q,將q插入在p后,
接下來(lái)將p中的數(shù)據(jù)copy入q中,然后再將要插入的數(shù)據(jù)記錄在p中。
?
78.鏈表和數(shù)組的區(qū)別在哪里?
分析:主要在基本概念上的理解。
但是最好能考慮的全面一點(diǎn),現(xiàn)在公司招人的競(jìng)爭(zhēng)可能就在細(xì)節(jié)上產(chǎn)生,
誰(shuí)比較仔細(xì),誰(shuí)獲勝的機(jī)會(huì)就大。
?
79.
1.編寫(xiě)實(shí)現(xiàn)鏈表排序的一種算法。說(shuō)明為什么你會(huì)選擇用這樣的方法?
2.編寫(xiě)實(shí)現(xiàn)數(shù)組排序的一種算法。說(shuō)明為什么你會(huì)選擇用這樣的方法?
3.請(qǐng)編寫(xiě)能直接實(shí)現(xiàn)strstr()函數(shù)功能的代碼。 ?
?
80.阿里巴巴一道筆試題 ?
引自baihacker
問(wèn)題描述:
12個(gè)高矮不同的人,排成兩排,每排必須是從矮到高排列,而且第二排比對(duì)應(yīng)的第一排的人高,問(wèn)排列方式有多少種?
這個(gè)筆試題,很YD,因?yàn)榘涯硞€(gè)遞歸關(guān)系隱藏得很深.
? //第81-100題正在整理中。
---------------------------------------------------------------------------------------
整理資源下載地址:
題目系列:
1.[最新整理公布][匯總II]微軟等數(shù)據(jù)結(jié)構(gòu)+算法面試100題[第1-80題]
http://download.csdn.net/source/2846055
2.[第一部分]精選微軟等公司數(shù)據(jù)結(jié)構(gòu)+算法經(jīng)典面試100題[1-40題] ?
http://download.csdn.net/source/2778852
3.[第二部分]精選微軟等公司結(jié)構(gòu)+算法面試100題[前41-60題]:
http://download.csdn.net/source/2811703
4.[第1題-60題匯總]微軟等數(shù)據(jù)結(jié)構(gòu)+算法面試100題
http://download.csdn.net/source/2826690
答案系列:
5.[最新答案V0.3版]微軟等數(shù)據(jù)結(jié)構(gòu)+算法面試100題[第21-40題答案]
http://download.csdn.net/source/2832862
6.[答案V0.2版]精選微軟數(shù)據(jù)結(jié)構(gòu)+算法面試100題[前20題]--修正
http://download.csdn.net/source/2813890
//此份答案是針對(duì)最初的V0.1版本,進(jìn)行的校正與修正。
7.[答案V0.1版]精選微軟數(shù)據(jù)結(jié)構(gòu)+算法面試100題[前25題]
http://download.csdn.net/source/2796735
更多資源,下載地址:
http://v_july_v.download.csdn.net/
謝謝。
?
?---------------------------------------
??????? 各位,我已經(jīng)針對(duì)本100題,?開(kāi)了一帖,作為本微軟等100題系列的永久維護(hù)地址。
真誠(chéng)歡迎,各位,前去帖子上,寫(xiě)下對(duì)這100道題中任何一題的思路或想法。
帖子地址:
橫空出世,席卷Csdn:記微軟等100題系列數(shù)次被薦[100題維護(hù)地址] 11.26日
http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html
?
?
本人July對(duì)以上所有任何內(nèi)容和資料享有版權(quán),轉(zhuǎn)載請(qǐng)注明出處。
向你的厚道致敬。謝謝。
2010年11月22日。????
轉(zhuǎn)載于:https://www.cnblogs.com/v-July-v/archive/2010/11/22/1983723.html
總結(jié)
以上是生活随笔為你收集整理的[整理III]微软等数据结构+算法面试100题[最新第61-80题]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Garden
- 下一篇: jquery 学习之一 对象访问