程序猿必備!數據結構與算法精選面試題

摘要: 程序員換工作,沒有這些面試題怎麼找?


程序猿必備!數據結構與算法精選面試題


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

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

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

我認為把編程面試問題分成不同的主題領域是有幫助的。我在訪談中經常看到的主題領域是數組、鏈表、字符串、二叉樹,以及來自算法的問題(例如字符串算法、快速排序或基數排序等排序算法),這就是你將在本文中找到的內容。

這些面試題不能保證你會被問到這些編程、數據結構和算法問題,但它們會讓你對在真正的編程工作面試中可能遇到的問題有足夠的瞭解。

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

順便說一句,如果你對基本的數據結構和算法沒有充分的知識,或者從沒有接觸過它們,那麼嘗試這些問題就沒有意義了。

在這種情況下,你應該學習一門很好的課程,比如Robert Horvick的算法和數據結構第1部分和第2部分,以更新你的DS和算法技能。

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

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

1.數組編碼面試問題

數組是最基本的數據結構,它將元素存儲在一個連續的內存位置。這也是面試官們熱衷的話題之一,在任何一次編程面試中,你都會聽到很多關於數組的問題,比如將數組中元素位置顛倒,對數組進行排序,或者搜索數組上的元素。

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

為了創建更小或更大的數組,需要創建一個新數組並將所有元素從舊數組拷貝到新數組。

解決基於數組的問題的關鍵是對數組數據結構以及基本的編程構造函數(如循環、遞歸和基本運算符)要有很好的瞭解。

以下是一些熱門的基於數組的編程面試問題:

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

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

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

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

5.如果一個數組包含多重複制,那麼如何找到重複的數字? (方法)

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

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

8.如何從數組中刪除多重複制? (方法)

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

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

這些問題不僅可以幫助你提高解決問題的能力,還可以提高你對數組數據結構的認識。

如果你需要更高級的基於數組的問題,那麼你還可以看到編程面試訓練營:算法+數據結構,一個專門為面試準備的關於算法的Bootcamp風格課程,以獲得一個技術巨頭公司的工作,如谷歌,微軟,蘋果,Facebook等。


程序猿必備!數據結構與算法精選面試題


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

2.鏈表編程面試問題

鏈表是補充數組數據結構的另一種常見的數據結構。與數組類似,它也是一個線性數據結構,以線性方式存儲元素。

然而,與數組不同的是,它不會將它們存儲在連續的位置;相反,它們分散在內存中各處,內存使用節點相互連接。

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

由於這種結構,在鏈表中添加和刪除元素很容易,因為只需要更改鏈接而不是創建數組,但是查找是困難的,並且通常需要O(n)來查找單個鏈表中的元素。

本文提供了更多關於數組和鏈表數據結構之間區別的信息。

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

為了解決基於鏈表的問題,對遞歸知識進行了解是很重要的,因為鏈表是遞歸數據結構。

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

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

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

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

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

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

5.如何刪除未排序鏈表中的重複節點? (方法)

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

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

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

這些問題將幫助你發展解決問題的技能,以及提高你對鏈表數據結構的知識。

如果你在解決這些鏈表編程問題時遇到困難,那麼我建議你通過瀏覽數據結構和算法來刷新數據結構和算法技能:使用Java課程進行深入研究。


程序猿必備!數據結構與算法精選面試題


你可以看這30題獲得更多的練習。

3.字符串編程面試問題

除了數組和鏈表數據結構外,字符串也是編程面試中的另一個熱門話題。我參加過的面試,都有以字符串為基礎的問題。

字符串的一個好處是,如果你瞭解數組,你可以很容易地解決基於字符串的問題,因為字符串是一個字符數組。

因此,通過解決基於數組的編程問題所學習的所有技術也可以用於解決字符串編程問題。

下面是編程面試中經常被問到的字符串編碼問題:

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

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

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

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

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

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

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

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

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

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

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

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

這些問題有助於提高對字符串數據結構的認識。如果你能在沒有任何幫助的情況下解決所有這些問題,那麼你應該不錯。

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


程序猿必備!數據結構與算法精選面試題


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

4二叉樹編碼面試問題

到目前為止,我們只研究了線性數據結構,但是現實世界中的所有信息都不能以線性方式表示,這就是樹數據結構的作用所在。

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

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

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

下面是一些軟件工程師或開發人員面試中常見的基於二進制樹的編碼問題:

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

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

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

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

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

6.如何實現後序遍歷算法? (方法)

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

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

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

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

如果你覺得對二叉樹編碼的理解不夠充分,而且你不能自己解決這些問題,我建議你回去選擇一個好的數據結構和算法課程,比如從0到1:Java中的數據結構和算法。


程序猿必備!數據結構與算法精選面試題


如果你需要更多的推薦,這裡是我的數據結構算法書籍和課程列表。

5.其他編碼面試問題

除了基於數據結構的問題,大多數編程工作面試也會問算法、設計、位操作和基於邏輯的問題,我將在本節中描述這些問題。

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

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

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

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

4.如何實現歸併排序算法?(方法)

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

6.如何實現計數排序算法?(方法)

7.如何實現基數排序算法?(方法)

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

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

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

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


程序猿必備!數據結構與算法精選面試題


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

現在你已經為編碼面試做好了準備

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

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

這份清單提供了很好的準備主題,也有助於評估你的準備工作,找出你的優勢和劣勢。良好的數據結構和算法知識對於編碼面試的成功是很重要的,這也是你應該集中注意力的地方。

本文由阿里云云棲社區組織翻譯。

文章原標題《50-data-structure-and-algorithms-interview-questions-for-programmers》


分享到:


相關文章: