50+ 精選數(shù)據(jù)結(jié)構(gòu)和算法面試問(wèn)題 【譯】

原文鏈接:https://hackernoon.com/50-data-structure-and-algorithms-interview-questions-for-programmers-b4b1ac61f5b0

譯文原文:http://pengtuo.tech/algorithms/2018/10/02/data-structure-50/

本文的描述語(yǔ)言為 Java

image

有許多計(jì)算機(jī)科學(xué)專(zhuān)業(yè)畢業(yè)生或者程序猿會(huì)申請(qǐng)研發(fā)職位,在這個(gè)行業(yè)里有很多待遇比較好的大公司吧碾,例如國(guó)內(nèi)的BAT凰盔,頭條,美團(tuán)等倦春,國(guó)外也有亞馬遜户敬,谷歌以及 Facebook 等大型公司,但他們中的許多人都不知道當(dāng)你在這些公司申請(qǐng)工作時(shí)會(huì)遇到什么樣的編程面試問(wèn)題睁本。

在本文中尿庐,我將與不同經(jīng)驗(yàn)水平的程序猿分享一些常見(jiàn)的編程面試問(wèn)題,涉及從剛從大學(xué)畢業(yè)的人到具有一到兩年經(jīng)驗(yàn)的程序員呢堰。

研發(fā)面試主要由 數(shù)據(jù)結(jié)構(gòu)和基于算法的問(wèn)題 組成抄瑟,也會(huì)有一些邏輯性的面試問(wèn)題,例如 如何在不使用臨時(shí)變量的情況下交換兩個(gè)整數(shù)暮胧?

我認(rèn)為將算法問(wèn)題劃分到不同的領(lǐng)域是非常有幫助的锐借。我在面試中經(jīng)常遇見(jiàn)的領(lǐng)域有數(shù)組、鏈表往衷、字符串钞翔、二叉樹(shù),還有算法問(wèn)題(例如字符串算法問(wèn)題席舍、排序算法問(wèn)題布轿,或者其他),并且這些都會(huì)在本文中提及。

我不能保證本文中的數(shù)據(jù)結(jié)構(gòu)問(wèn)題或者算法問(wèn)題肯定會(huì)被問(wèn)及汰扭,但是這些會(huì)讓你充分了解實(shí)際面試中的遇到的各種問(wèn)題以及解題思路稠肘。

一旦充分學(xué)習(xí)了這些問(wèn)題,你應(yīng)該有足夠的信心參加任何電話(huà)面試或者線(xiàn)下面試萝毛。

順便說(shuō)一下项阴,如果你沒(méi)有認(rèn)真學(xué)習(xí)過(guò)基本的數(shù)據(jù)結(jié)構(gòu)和算法,或者你沒(méi)有多年觸及它們笆包,那么還是建議你先去補(bǔ)充一下基礎(chǔ)知識(shí)环揽,再來(lái)研究本文的問(wèn)題。

Top 50 算法和編程面試問(wèn)題

話(huà)不多說(shuō)庵佣,這里列出我在研發(fā)工作以及面試中一些最常見(jiàn)的算法面試問(wèn)題列表:

1. 數(shù)組類(lèi)面試問(wèn)題

數(shù)組是最基本的數(shù)據(jù)結(jié)構(gòu)歉胶,它將元素存儲(chǔ)在連續(xù)的內(nèi)存位置。這也是面試官很喜歡面試的方向巴粪,你會(huì)在任何算法面試中聽(tīng)到很多關(guān)于數(shù)組的問(wèn)題通今,例如:反轉(zhuǎn)數(shù)組,排序數(shù)組或搜索數(shù)組上的元素肛根。

數(shù)組數(shù)據(jù)結(jié)構(gòu)最大的優(yōu)點(diǎn)是當(dāng)知道索引時(shí)能夠在 O(1) 的時(shí)間復(fù)雜度內(nèi)搜索辫塌,但是向數(shù)組數(shù)據(jù)結(jié)構(gòu)里添加和移除元素時(shí)會(huì)非常慢,因?yàn)閿?shù)組一旦創(chuàng)建就不能更改其規(guī)格晶通。當(dāng)需要更改數(shù)組的大小時(shí)璃氢,則需要?jiǎng)?chuàng)建一個(gè)新的數(shù)組,然后從原先的數(shù)組中將元素拷貝到新的數(shù)組中狮辽。

解決基于數(shù)組類(lèi)的算法問(wèn)題的關(guān)鍵是要充分了解數(shù)組數(shù)據(jù)結(jié)構(gòu)以及基本的編程技能一也,例如循環(huán)、遞歸等喉脖。

以下列出非常受歡迎的基于數(shù)組類(lèi)的算法面試問(wèn)題供你練習(xí):

  1. 如何在一個(gè)給定的椰苟,范圍是 1 到 100 的亂序整數(shù)數(shù)組中找到缺失的值?solution
  2. 如何在一個(gè)給定的整數(shù)數(shù)組中找到重復(fù)的數(shù)字树叽?solution
  3. 如何在一個(gè)亂序的整數(shù)數(shù)組中找到最大值與最小值舆蝴?solution
  4. 如何找到所有的整數(shù)對(duì),其總和等于給定的數(shù)字题诵?solution
  5. 如何在包含多個(gè)重復(fù)項(xiàng)的數(shù)組中找到重復(fù)的數(shù)字洁仗?solution
  6. 如何用 Java 語(yǔ)言在一個(gè)給定的數(shù)組中移除重復(fù)項(xiàng)?solution
  7. 請(qǐng)利用快速排序?qū)σ粋€(gè)數(shù)組進(jìn)行原地排序性锭。solution
  8. 如何用 Java 在原地反轉(zhuǎn)一個(gè)數(shù)組赠潦?solution
  9. 請(qǐng)了解數(shù)組問(wèn)題中的對(duì)撞指針和滑動(dòng)窗口技巧

這些問(wèn)題不僅能夠幫助你提高解決問(wèn)題的能力,還能更好的幫助你理解數(shù)組這個(gè)數(shù)據(jù)結(jié)構(gòu)草冈。如果你覺(jué)得這幾道題不夠聯(lián)系她奥,則可以查看 30 array question瓮增,也可以在 Leetcode或者Lintcode上的數(shù)組標(biāo)簽下找題目。

2. 鏈表類(lèi)面試題

鏈表是另一種非常常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)哩俭。與數(shù)組結(jié)構(gòu)類(lèi)似绷跑,鏈表也是線(xiàn)性數(shù)據(jù)結(jié)構(gòu)并且以線(xiàn)性的方式存儲(chǔ)。

然而凡资,和數(shù)組數(shù)據(jù)結(jié)構(gòu)不同的是砸捏,在內(nèi)存物理位置上數(shù)據(jù)元素并不是相鄰的,相反讳苦,數(shù)據(jù)是分散存儲(chǔ)在內(nèi)存中带膜,通過(guò)節(jié)點(diǎn)與其他數(shù)據(jù)相連。鏈表就是一系列的節(jié)點(diǎn)鸳谜,其中每個(gè)節(jié)點(diǎn)存儲(chǔ)著數(shù)據(jù)值和下一個(gè)節(jié)點(diǎn)的地址。

由于這種結(jié)構(gòu)式廷,在鏈表中添加和刪除元素很容易咐扭,因?yàn)槟恍枰逆溄佣皇莿?chuàng)建數(shù)組,但搜索很困難滑废,在單鏈表中通常需要花費(fèi) O(n) 時(shí)間來(lái)查找元素蝗肪。

鏈表還有其他的變種,例如雙向鏈表蠕趁,允許在鏈表上兩個(gè)方向(向前或向后)游走薛闪;還有循環(huán)鏈表,鏈表的首尾相連組合成一個(gè)圈俺陋。

為了解決基于鏈表的問(wèn)題豁延,需要對(duì)遞歸很了解,因?yàn)殒湵硎?a target="_blank" rel="nofollow">遞歸數(shù)據(jù)結(jié)構(gòu)腊状。如果從鏈表中獲取一個(gè)節(jié)點(diǎn)诱咏,則剩余的數(shù)據(jù)結(jié)構(gòu)仍然是鏈表,因此缴挖,許多鏈表問(wèn)題具有比迭代解決方案更簡(jiǎn)單的遞歸解決方案袋狞。

以下列出一些常見(jiàn)的受歡迎的鏈表的面試問(wèn)題:

  1. 如何遍歷一次就找到鏈表的中間節(jié)點(diǎn)?solution
  2. 如何判斷一個(gè)鏈表是否有環(huán)映屋?如何找到這個(gè)環(huán)的起始節(jié)點(diǎn)苟鸯?solution
  3. 如何反轉(zhuǎn)一個(gè)鏈表?solution
  4. 如何不使用遞歸的情況下反轉(zhuǎn)鏈表棚点?solution
  5. 如何從未排序的鏈表中移除重復(fù)節(jié)點(diǎn)早处?solution
  6. 請(qǐng)求出一個(gè)單鏈表的長(zhǎng)度。solution
  7. 如何找出單鏈表的倒數(shù)第三個(gè)節(jié)點(diǎn)乙濒?solution
  8. 請(qǐng)對(duì)兩個(gè)鏈表表示的整數(shù)求和陕赃,并返回鏈表卵蛉。solution

這些問(wèn)題將幫助您提高解決問(wèn)題的能力,并提高您對(duì)鏈表數(shù)據(jù)結(jié)構(gòu)的了解么库。如果對(duì)于以上這些問(wèn)題感覺(jué)比較吃力傻丝,建議先補(bǔ)充鏈表的基礎(chǔ)知識(shí)。你也可以聯(lián)系30 linked list interview questions

3. 字符串類(lèi)面試問(wèn)題

與數(shù)組和鏈表數(shù)據(jù)結(jié)構(gòu)同樣诉儒,字符串類(lèi)型是面試中的另一個(gè)熱門(mén)話(huà)題葡缰。關(guān)于字符串問(wèn)題的好消息是,如果你懂?dāng)?shù)組忱反,你可以很容易地解決基于字符串的問(wèn)題泛释,因?yàn)樽址皇且粋€(gè)字符數(shù)組。

所以所有你的基于數(shù)組類(lèi)問(wèn)題的解題思路與技巧都可以用來(lái)解決字符串類(lèi)型的問(wèn)題温算。

以下是我列出的在工作面試中會(huì)被頻繁問(wèn)及的字符串類(lèi)型問(wèn)題:

  1. 如何將字符串中重復(fù)的字符打印出來(lái)怜校?solution
  2. 如何判斷兩個(gè)亂序的字符串中的字母都相同?solution
  3. 請(qǐng)將字符串中第一個(gè)未重復(fù)的字符打印出來(lái)注竿。solution
  4. 如何利用遞歸翻轉(zhuǎn)一個(gè)字符串茄茁?solution
  5. 如何判斷一個(gè)字符串中只包含數(shù)字字符?solution
  6. 請(qǐng)統(tǒng)計(jì)一個(gè)字符串中的元音和輔音的個(gè)數(shù)巩割。solution
  7. 如何計(jì)算字符串中給定字符的出現(xiàn)次數(shù)裙顽?solution
  8. 請(qǐng)輸出給定字符串的所有排列組合。solution
  9. 如何翻轉(zhuǎn)給定句子中的單詞宣谈?solution
  10. 如何判斷兩個(gè)字符串互為旋轉(zhuǎn)愈犹?solution
  11. 如何判斷一個(gè)字符是回文字符?solution

這些問(wèn)題有助于提高您對(duì)字符串作為數(shù)據(jù)結(jié)構(gòu)的了解闻丑。 如果你可以在沒(méi)有任何幫助的情況下解決所有這些String問(wèn)題漩怎,那么你很棒棒。

如果你需要更多的練習(xí)梆掸,可以看這里

4. 二叉樹(shù)面試問(wèn)題

到目前為止扬卷,我們只研究了線(xiàn)性數(shù)據(jù)結(jié)構(gòu),但現(xiàn)實(shí)世界中的所有信息都無(wú)法以線(xiàn)性方式表示酸钦,而這正是樹(shù)數(shù)據(jù)結(jié)構(gòu)所幫助的地方怪得。

樹(shù)數(shù)據(jù)結(jié)構(gòu)是一種數(shù)據(jù)結(jié)構(gòu),允許以分層方式存儲(chǔ)數(shù)據(jù)卑硫。 根據(jù)存儲(chǔ)數(shù)據(jù)的方式徒恋,有不同類(lèi)型的樹(shù),例如二叉樹(shù)欢伏,其每個(gè)節(jié)點(diǎn)最多有兩個(gè)子節(jié)點(diǎn)入挣。以及其近親,二叉搜索樹(shù)硝拧,這個(gè)是最受歡迎的樹(shù)形數(shù)據(jù)結(jié)構(gòu)了径筏。因此你會(huì)發(fā)現(xiàn)有很多的面試問(wèn)題都是基于二叉樹(shù)和二叉搜索樹(shù)葛假,例如 如何遍歷,計(jì)算節(jié)點(diǎn)個(gè)數(shù)滋恬,找到樹(shù)深度或者判斷其是否為平衡樹(shù)等聊训。

解決二叉樹(shù)問(wèn)題的一個(gè)關(guān)鍵點(diǎn)是需要很扎實(shí)的理論基礎(chǔ),例如: 什么是二叉樹(shù)的大小或深度恢氯,什么是葉子带斑,什么是節(jié)點(diǎn),以及對(duì)流行的遍歷算法的理解勋拟,例如前中后序遍歷勋磕。

以下是流行的基于二叉樹(shù)的面試問(wèn)題列表:

  1. 如何實(shí)現(xiàn)二叉搜索樹(shù)?solution
  2. 請(qǐng)前序遍歷一顆二叉樹(shù)敢靡。solution
  3. 請(qǐng)不使用遞歸的情況下前序遍歷一顆二叉樹(shù)挂滓。solution
  4. 請(qǐng)中序遍歷一顆二叉樹(shù)。solution
  5. 請(qǐng)?jiān)诓皇褂眠f歸的情況下中序遍歷一顆二叉樹(shù)并輸出啸胧。solution
  6. 如何實(shí)現(xiàn)后序遍歷算法杂彭?solution
  7. 請(qǐng)?jiān)诓皇褂眠f歸的情況下后序遍歷一顆二叉樹(shù)。solution
  8. 如何輸出一顆二叉搜索樹(shù)的所有葉子結(jié)點(diǎn)吓揪?solution
  9. 如何統(tǒng)計(jì)一顆二叉樹(shù)的所有葉子節(jié)點(diǎn)的個(gè)數(shù)。solution
  10. 如何在一個(gè)數(shù)組中執(zhí)行二分搜索所计。solution

5. 各式面試問(wèn)題

除了基于數(shù)據(jù)結(jié)構(gòu)的問(wèn)題之外柠辞,大多數(shù)面試中還會(huì)詢(xún)問(wèn)算法,設(shè)計(jì)主胧,位操作和基于邏輯的一般問(wèn)題叭首,我將在本節(jié)中對(duì)其進(jìn)行描述。

  1. 如何實(shí)現(xiàn)冒泡排序踪栋?solution
  2. 如何實(shí)現(xiàn)迭代快速排序算法焙格?solution
  3. 如何實(shí)現(xiàn)插入排序算法?solution
  4. 如何實(shí)現(xiàn)歸并排序算法夷都?solution
  5. 如何實(shí)現(xiàn)桶排序算法眷唉?solution
  6. 如何實(shí)現(xiàn)計(jì)數(shù)排序算法?solution
  7. 如何實(shí)現(xiàn)基數(shù)排序算法囤官?solution
  8. 如何在不使用第三個(gè)變量的情況下交換兩個(gè)數(shù)字冬阳?solution
  9. 如何判斷兩個(gè)矩形是否互相重疊?solution
  10. 如何設(shè)計(jì)自動(dòng)售貨機(jī)党饮?solution

順便說(shuō)一下肝陪,你在實(shí)踐中解決的問(wèn)題越多,你的準(zhǔn)備就越好刑顺。 因此氯窍,如果您認(rèn)為 50 還不夠而且您需要更多饲常,那么請(qǐng)查看這些額外的50個(gè)編程問(wèn)題,以便進(jìn)行更全面的準(zhǔn)備狼讨。

現(xiàn)在贝淤,你應(yīng)該準(zhǔn)備好了

這些是數(shù)據(jù)結(jié)構(gòu)和算法之外的一些最常見(jiàn)的問(wèn)題,可以幫助您在面試中做得很好熊楼。這些常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)和算法問(wèn)題是您在任何級(jí)別的技術(shù)面試都需要了解的問(wèn)題霹娄。

如果您正在尋找開(kāi)發(fā)工作,您可以使用此這些問(wèn)題列表開(kāi)始準(zhǔn)備鲫骗。此列表提供了準(zhǔn)備的好主題犬耻,也有助于評(píng)估您的準(zhǔn)備工作,以找出您的優(yōu)勢(shì)和劣勢(shì)領(lǐng)域执泰。熟悉數(shù)據(jù)結(jié)構(gòu)和算法對(duì)于面試成功非常重要枕磁。

譯者:歡迎大家訪(fǎng)問(wèn)我的個(gè)人博客與留言 http://pengtuo.tech

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市术吝,隨后出現(xiàn)的幾起案子计济,更是在濱河造成了極大的恐慌,老刑警劉巖排苍,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沦寂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡淘衙,警方通過(guò)查閱死者的電腦和手機(jī)传藏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)彤守,“玉大人毯侦,你說(shuō)我怎么就攤上這事【叩妫” “怎么了侈离?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)筝蚕。 經(jīng)常有香客問(wèn)我卦碾,道長(zhǎng),這世上最難降的妖魔是什么饰及? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任蔗坯,我火速辦了婚禮,結(jié)果婚禮上燎含,老公的妹妹穿的比我還像新娘宾濒。我一直安慰自己,他們只是感情好屏箍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布绘梦。 她就那樣靜靜地躺著橘忱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卸奉。 梳的紋絲不亂的頭發(fā)上钝诚,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音榄棵,去河邊找鬼凝颇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛疹鳄,可吹牛的內(nèi)容都是我干的拧略。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼瘪弓,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼垫蛆!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起腺怯,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤袱饭,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后呛占,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體虑乖,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年晾虑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了决左。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡走贪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惑芭,到底是詐尸還是另有隱情坠狡,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布遂跟,位于F島的核電站逃沿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏幻锁。R本人自食惡果不足惜凯亮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哄尔。 院中可真熱鬧假消,春花似錦、人聲如沸岭接。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至啃沪,卻和暖如春粘拾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背创千。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工缰雇, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人追驴。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓械哟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親氯檐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子戒良,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.把二元查找樹(shù)轉(zhuǎn)變成排序的雙向鏈表 題目: 輸入一棵二元查找樹(shù),將該二元查找樹(shù)轉(zhuǎn)換成一個(gè)排序的雙向鏈表冠摄。 要求不...
    曲終人散Li閱讀 3,319評(píng)論 0 19
  • 音樂(lè)治療臨床技術(shù) -SW中國(guó)音療 1.五音應(yīng)五臟療疾與方法調(diào)理 音樂(lè)在我國(guó)已有8000年上下的可考?xì)v史證明糯崎,主要由...
    翟軍偉音療師閱讀 785評(píng)論 0 1
  • 躺在床上又開(kāi)始漫無(wú)目的的浮想聯(lián)翩,將近一點(diǎn)了又要步入失眠的狀態(tài)河泳,可能是因?yàn)楣ぷ鞯木壒饰帜兀看味妓谋容^晚,或許現(xiàn)在九...
    半島玫瑰閱讀 385評(píng)論 0 1
  • 第一天的“斗”作業(yè)用了將近三個(gè)小時(shí)拆挥,現(xiàn)在是23:03薄霜,我在完成了作業(yè)之后來(lái)進(jìn)行另一項(xiàng)思想活動(dòng)——日更,算上今天應(yīng)該...
    布魯斯J閱讀 286評(píng)論 0 0
  • 最近比較煩比較煩比較煩纸兔,諸事不順惰瓜,甚至都要懷疑人生了,不得不承認(rèn)我是個(gè)容易情緒容易悲觀消極的人 突然接到好...
    A一路繁花相送閱讀 351評(píng)論 1 1