中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

數(shù)據(jù)結(jié)構(gòu)與算法精選面試題

2018-10-09    來源:raincent

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

dcc75b9403894a0b57a971ccf65034d2d9892f4e

有很多計算機科學(xué)技術(shù)專業(yè)的畢業(yè)生和程序員申請在Uber和Netflix這樣的初創(chuàng)公司、谷歌和阿里巴巴這樣的大公司以及Infosys或Luxsoft等以服務(wù)為基礎(chǔ)的公司從事編程、編碼和軟件開發(fā)工作,但他們中的許多人都不知道,當(dāng)你申請這些公司的職位時,你會遇到什么樣的編程面試問題。

在這篇文章中,我將分享一些常見的來自不同經(jīng)驗水平程序員的編程面試問題,他們是從剛大學(xué)畢業(yè)的人到有一到兩年經(jīng)驗的程序員。

編程面試主要由數(shù)據(jù)結(jié)構(gòu)問題和算法問題以及一些邏輯問題組成,比如,如何在不使用臨時變量的情況下交換兩個整數(shù)?

我認(rèn)為把編程面試問題分成不同的主題領(lǐng)域是有幫助的。我在訪談中經(jīng)?吹降闹黝}領(lǐng)域是數(shù)組、鏈表、字符串、二叉樹,以及來自算法的問題(例如字符串算法、快速排序基數(shù)排序等排序算法),這就是你將在本文中找到的內(nèi)容。

這些面試題不能保證你會被問到這些編程、數(shù)據(jù)結(jié)構(gòu)和算法問題,但它們會讓你對在真正的編程工作面試中可能遇到的問題有足夠的了解。

一旦你完成這些問題,你就應(yīng)該有足夠的信心參加任何電話或面對面的面試。

順便說一句,如果你對基本的數(shù)據(jù)結(jié)構(gòu)和算法沒有充分的知識,或者從沒有接觸過它們,那么嘗試這些問題就沒有意義了。

在這種情況下,你應(yīng)該學(xué)習(xí)一門很好的課程,比如Robert Horvick的算法和數(shù)據(jù)結(jié)構(gòu)第1部分和第2部分,以更新你的DS和算法技能。
 

前50大算法和編碼面試問題


下面是我列出的一些最常見的編程面試問題:
 

1.?dāng)?shù)組編碼面試問題


數(shù)組是最基本的數(shù)據(jù)結(jié)構(gòu),它將元素存儲在一個連續(xù)的內(nèi)存位置。這也是面試官們熱衷的話題之一,在任何一次編程面試中,你都會聽到很多關(guān)于數(shù)組的問題,比如將數(shù)組中元素位置顛倒,對數(shù)組進(jìn)行排序,或者搜索數(shù)組上的元素。

數(shù)組數(shù)據(jù)結(jié)構(gòu)的主要優(yōu)點是,如果知道索引,它可以提供快速的O(1)搜索,但是從數(shù)組中添加和刪除元素是很慢的,因為一旦創(chuàng)建了數(shù)組,就無法更改數(shù)組的大小。

為了創(chuàng)建更小或更大的數(shù)組,需要創(chuàng)建一個新數(shù)組并將所有元素從舊數(shù)組拷貝到新數(shù)組。

解決基于數(shù)組的問題的關(guān)鍵是對數(shù)組數(shù)據(jù)結(jié)構(gòu)以及基本的編程構(gòu)造函數(shù)(如循環(huán)、遞歸和基本運算符)要有很好的了解。

以下是一些熱門的基于數(shù)組的編程面試問題:

1.如何在一個1到100的整數(shù)數(shù)組中找到丟失的數(shù)字?(方法)

2.如何在給定的整數(shù)數(shù)組中找到重復(fù)的數(shù)字? (方法)

3.如何在未排序整數(shù)數(shù)組中找到最大值和最小值? (方法)

4.如何找到數(shù)組所有和等于一個給定數(shù)的數(shù)對? (方法)

5.如果一個數(shù)組包含多重復(fù)制,那么如何找到重復(fù)的數(shù)字? (方法)

6.在Java中如何從給定數(shù)組中刪除多重復(fù)制? (方法)

7.如何使用快速排序算法對整數(shù)數(shù)組進(jìn)行排序? (方法)

8.如何從數(shù)組中刪除多重復(fù)制? (方法)

9.如何在Java中對數(shù)組進(jìn)行反向操作? (方法)

10.如何在不使用任何庫的情況下從數(shù)組中刪除多重復(fù)制? (方法)

這些問題不僅可以幫助你提高解決問題的能力,還可以提高你對數(shù)組數(shù)據(jù)結(jié)構(gòu)的認(rèn)識。

如果你需要更高級的基于數(shù)組的問題,那么你還可以看到編程面試訓(xùn)練營:算法+數(shù)據(jù)結(jié)構(gòu),一個專門為面試準(zhǔn)備的關(guān)于算法的Bootcamp風(fēng)格課程,以獲得一個技術(shù)巨頭公司的工作,如谷歌,微軟,蘋果,F(xiàn)acebook等。

33b9ffa0c80170a7f34ddf899bf663ce2d17b403

如果你覺得10個問題不夠用來訓(xùn)練,或者你需要更多的訓(xùn)練,你可以看一下這30。
 

2.鏈表編程面試問題


鏈表是補充數(shù)組數(shù)據(jù)結(jié)構(gòu)的另一種常見的數(shù)據(jù)結(jié)構(gòu)。與數(shù)組類似,它也是一個線性數(shù)據(jù)結(jié)構(gòu),以線性方式存儲元素。

然而,與數(shù)組不同的是,它不會將它們存儲在連續(xù)的位置;相反,它們分散在內(nèi)存中各處,內(nèi)存使用節(jié)點相互連接。

鏈表就是節(jié)點列表,每個節(jié)點包含存儲的值和下一個節(jié)點的地址。

由于這種結(jié)構(gòu),在鏈表中添加和刪除元素很容易,因為只需要更改鏈接而不是創(chuàng)建數(shù)組,但是查找是困難的,并且通常需要O(n)來查找單個鏈表中的元素。

本文提供了更多關(guān)于數(shù)組和鏈表數(shù)據(jù)結(jié)構(gòu)之間區(qū)別的信息。

鏈表也有多種形式,比如單鏈表,它允許你沿著一個方向(向前或向后)移動遍歷;雙鏈表,允許在兩個方向(向前和向后)遍歷;最后,循環(huán)鏈表則形成一個環(huán)。

為了解決基于鏈表的問題,對遞歸知識進(jìn)行了解是很重要的,因為鏈表是遞歸數(shù)據(jù)結(jié)構(gòu)。

如果從鏈表中取出一個節(jié)點,剩下的數(shù)據(jù)結(jié)構(gòu)仍然是鏈表,因此,許多鏈表問題的遞歸解決方案比迭代解決方案更簡單。

以下是一些最常見和最流行的面試問題及解決方法:

1.如何在一次遍歷中找到單個鏈表的中值?(方法)

2.如何證明給定的鏈表是否包含循環(huán)?如何找到循環(huán)的頭節(jié)點? (方法)

3.如何使鏈表反向? (方法)

4.如何在不使用遞歸的情況下逆轉(zhuǎn)單鏈表? (方法)

5.如何刪除未排序鏈表中的重復(fù)節(jié)點? (方法)

6.如何得到單鏈表的長度?(方法)

7.如何在單鏈表中從尾部找到第三個節(jié)點? (方法)

8.如何使用堆棧得到兩個鏈表的和? (方法)

這些問題將幫助你發(fā)展解決問題的技能,以及提高你對鏈表數(shù)據(jù)結(jié)構(gòu)的知識。

如果你在解決這些鏈表編程問題時遇到困難,那么我建議你通過瀏覽數(shù)據(jù)結(jié)構(gòu)和算法來刷新數(shù)據(jù)結(jié)構(gòu)和算法技能:使用Java課程進(jìn)行深入研究。

1ee66b96bdd99fb2f1748299196fbe8ba7316c1d

你可以看這30獲得更多的練習(xí)。
 

3.字符串編程面試問題


除了數(shù)組和鏈表數(shù)據(jù)結(jié)構(gòu)外,字符串也是編程面試中的另一個熱門話題。我參加過的面試,都有以字符串為基礎(chǔ)的問題

字符串的一個好處是,如果你了解數(shù)組,你可以很容易地解決基于字符串的問題,因為字符串是一個字符數(shù)組。

因此,通過解決基于數(shù)組的編程問題所學(xué)習(xí)的所有技術(shù)也可以用于解決字符串編程問題。

下面是編程面試中經(jīng)常被問到的字符串編碼問題:

1.如何從字符串打印重復(fù)字符?(方法)

2.如何檢查兩個字符串是否互相顛倒? (方法)

3.如何從字符串中打印第一個非重復(fù)字符? (方法)

4.如何使用遞歸反轉(zhuǎn)給定的字符串? (方法)

5.如何檢查字符串是否只包含數(shù)字? (方法)

6.如何在字符串中找到重復(fù)的字符? (方法)

7.在給定的字符串中,如何計算元音和輔音的數(shù)量? (方法)

8.如何計算字符串中給定字符的出現(xiàn)次數(shù)? (方法)

9.如何找到一個字符串的所有排列? (方法)

10.如何在不使用任何庫方法的情況下逆轉(zhuǎn)一個句子中的單詞?(方法)

11.如何檢查兩個字符串是否互相旋轉(zhuǎn)?(方法)

12.如何檢查給定的字符串是否回文?(方法)

這些問題有助于提高對字符串?dāng)?shù)據(jù)結(jié)構(gòu)的認(rèn)識。如果你能在沒有任何幫助的情況下解決所有這些問題,那么你應(yīng)該不錯。

對于更高級的問題,我建議解決Steven Skiena的算法設(shè)計手冊中給出的問題,這本書中有最棘手的算法問題。

219f7425561d8aabc3d3f76bf5d2ee449fe57cc1

如果你需要更多的練習(xí),這里有另外一個20個字符串編碼問題的列表。
 

4二叉樹編碼面試問題


到目前為止,我們只研究了線性數(shù)據(jù)結(jié)構(gòu),但是現(xiàn)實世界中的所有信息都不能以線性方式表示,這就是樹數(shù)據(jù)結(jié)構(gòu)的作用所在。

樹數(shù)據(jù)結(jié)構(gòu)是一種允許以分層方式存儲數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。根據(jù)存儲數(shù)據(jù)的方式的不同,樹的類型不同,例如二叉樹,其中每個節(jié)點最多有兩個子節(jié)點。

除了近親二叉搜索樹,它也是最流行的樹數(shù)據(jù)結(jié)構(gòu)之一。因此,會有許多基于它們的問題,例如如何遍歷它們、計算節(jié)點、查找深度以及檢查它們是否為平衡二叉樹。

解決二叉樹問題的一個關(guān)鍵是要有很強的理論知識,例如二叉樹的大小或深度是什么,什么是葉子節(jié)點,什么是節(jié)點,以及理解流行的遍歷算法,例如先序遍歷、后序遍歷和順序遍歷。

下面是一些軟件工程師或開發(fā)人員面試中常見的基于二進(jìn)制樹的編碼問題:

1.如何實現(xiàn)二叉搜索樹?(方法)

2.如何在給定的二叉樹中執(zhí)行先序遍歷? (方法)

3.如何在不使用遞歸的情況下按順序遍歷給定的二叉樹? (方法)

4.如何在給定的二叉樹中執(zhí)行順序遍歷? (方法)

5.如何在不使用遞歸的情況下,使用順序遍歷打印給定二叉樹的所有節(jié)點? (方法)

6.如何實現(xiàn)后序遍歷算法? (方法)

7.如何在不使用遞歸的情況下遍歷后序遍歷中的二叉樹? (方法)

8.如何打印二叉搜索樹的所有葉子? (方法)

9.如何計算給定二叉樹中的葉節(jié)點數(shù)? (方法)

10.如何在給定數(shù)組中執(zhí)行二分法搜索?(方法)

如果你覺得對二叉樹編碼的理解不夠充分,而且你不能自己解決這些問題,我建議你回去選擇一個好的數(shù)據(jù)結(jié)構(gòu)和算法課程,比如01:Java中的數(shù)據(jù)結(jié)構(gòu)和算法。

d65e34cd0bd1cf10dbd9d3ab6824b8d4b9bb6aff

如果你需要更多的推薦,這里是我的數(shù)據(jù)結(jié)構(gòu)算法書籍課程列表。
 

5.其他編碼面試問題


除了基于數(shù)據(jù)結(jié)構(gòu)的問題,大多數(shù)編程工作面試也會問算法、設(shè)計、位操作和基于邏輯的問題,我將在本節(jié)中描述這些問題。

練習(xí)這些概念是很重要的,因為有時候這些概念在實際面試中很難解決。之前的練習(xí)不僅讓你熟悉它們,也讓你在向面試官解釋解決方案時更有信心。

1.如何實現(xiàn)冒泡排序算法?(方法)

2.如何實現(xiàn)迭代快速排序算法?(方法)

3.如何實現(xiàn)插入排序算法?(方法)

4.如何實現(xiàn)歸并排序算法?(方法)

5.如何實現(xiàn)桶排序算法?(方法)

6.如何實現(xiàn)計數(shù)排序算法?(方法)

7.如何實現(xiàn)基數(shù)排序算法?(方法)

8.如何在不使用第三個變量的情況下交換兩個數(shù)字?(方法)

9.如何檢查兩個矩形是否重疊?(方法)

10.如何設(shè)計自動售貨機?(方法)

如果你需要更多這樣的編程問題,你可以從Gayle Laakmann McDowell的著作《破解代碼面試》中得到幫助,該書提出了189個以上的編程問題和解決方案。一本可以在短時間內(nèi)為編程面試做準(zhǔn)備的好書。

d2fb4f6cb661dca1bbad1c114207ac5917352ffb

順便說一下,你在實踐中解決的問題越多,你準(zhǔn)備的就越好。所以,如果你認(rèn)為50題還不夠,你還需要更多,那么你可以看看這些額外的50電話面試的編程問題,以及這些書籍課程,以便更徹底的準(zhǔn)備。
 

現(xiàn)在你已經(jīng)為編碼面試做好了準(zhǔn)備


這些是數(shù)據(jù)結(jié)構(gòu)和算法之外的一些最常見的問題,可以幫助你在面試中表現(xiàn)出色。這些常見的編碼、數(shù)據(jù)結(jié)構(gòu)和算法問題是在任何級別的編程工作中成功面試任何公司(無論大小)所需要知道的。

如果你想在2018年找一份編程或軟件開發(fā)的工作,你可以從這些編碼問題開始準(zhǔn)備。

這份清單提供了很好的準(zhǔn)備主題,也有助于評估你的準(zhǔn)備工作,找出你的優(yōu)勢和劣勢。良好的數(shù)據(jù)結(jié)構(gòu)和算法知識對于編碼面試的成功是很重要的,這也是你應(yīng)該集中注意力的地方。

文章原標(biāo)題《50-data-structure-and-algorithms-interview-questions-for-programmers》

作者:javinpaul 譯者:虎說八道

標(biāo)簽: 代碼 谷歌 搜索

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:大數(shù)據(jù)應(yīng)用正深入經(jīng)濟生活

下一篇:如何交付機器學(xué)習(xí)項目:一份機器學(xué)習(xí)工程開發(fā)流程指南