程序员的前20个搜索和排序算法面试问题
大家好,如果您正在準備編程工作面試或正在尋找新工作,那么您知道這不是一個容易的過程。 在您職業的任何階段,您都必須幸運地接到電話并進行第一輪面試,但是在初學者方面,當您尋找第一份工作時就更加困難。 這就是為什么您不能只是輕描淡寫。 您必須準備抓住這個機會,為此,您必須知道在面試中您期望得到的機會。
問什么,應該準備哪些主題,等等? 我已經在博客上寫了很多關于您可以在此博客中找到有用文章的文章,但回顧一下,讓我告訴您,除了數據結構問題 , 系統設計問題以及特定于編程語言的問題(如Java或Scala)之外 ,大多數編程工作面試也詢問基于算法的問題。
這些基于常見的搜索和排序算法,例如
二進制搜索 , 圖算法等。 練習這些基于算法的問題很重要,因為盡管它們看起來很明顯且容易,但有時在實際面試中很難解決,特別是如果您從未親自編碼過。
之前已經練習過它們,不僅使您熟悉它們,還使您更有信心向面試官解釋解決方案,這在選擇中起著非常重要的作用。 它還使您為任何扭曲的問題和替代性問題做好了準備,例如采訪者經常想讓您使用遞歸或迭代來解決特定的編碼問題。
有時,如果使用的數據結構類似于我在String上查找重復字符所使用的數據結構,則它們會要求您解決該問題而不使用Set數據結構。 那只是一些常見的例子,這就是為什么實踐很重要的原因。
來自編碼面試的20多種搜索和排序算法問題
無論如何,這是一些來自訪談的常見搜索和排序算法問題:
1.您可以實現二進制搜索算法嗎? ( 解決方案 )
二進制搜索很容易,它是一種分而治之的算法,該算法將問題分為子問題,并加以解決。 這是一種搜索算法,因此可用于查找整數數組中的數字或目錄中的項目。
實現二進制搜索算法的最簡單方法是使用遞歸,這是解決方案鏈接所包含的內容,但是在查看解決方案之前,您應該自己嘗試一下。
值得一提的是輸入必須排序,我的意思是只能在排序數組中實現二進制搜索。
2.編寫程序以實現線性搜索算法? ( 解決方案 )
它甚至比二進制搜索更容易,您所需要做的就是使用for循環或遞歸方法遍歷數組中的所有元素,然后將每個元素與要搜索的元素進行比較。 當元素匹配時,根據您的要求返回index或true / false。
例如,如果您正在編寫一個contains()方法,則可以返回true或false來指示數組中是否存在元素。 由于需要掃描整個數組以找到元素,因此該算法的時間復雜度為O(n)。
3.是否可以實現沒有遞歸的二進制搜索算法? ( 解決方案 )
您可能知道,可以通過使用循環或有時使用堆棧來將遞歸算法替換為迭代算法。 對于二進制搜索,您也可以執行此操作,只需將數組劃分并比較中間元素,直到找到目標元素或數組中沒有其他元素為止。 如果目標元素大于中間元素,則必須向右移動,否則向左移動。
4.編寫代碼以在二叉樹中實現級別順序搜索? (解)
在級別順序搜索中,您首先要訪問同級節點,而不是進入下一個級別。 您可以使用Queue在二叉樹中實現級別順序搜索。如果您想了解更多信息,可以在freeCodeCamp上查看所有這些免費數據結構和算法課程 。
5.實現冒泡排序算法? ( 解決方案 )
這不是您學習的第一個排序算法嗎? 好吧,我做到了,這就是為什么我記得氣泡排序是關于將數組中的每個數字與其他數字進行比較,以便在每次傳遞最大或最小元素之后,氣泡一直上升到頂部。 我的意思是發現它已按排序順序放置。 這是基本算法之一,其時間復雜度為O(n ^ 2),這使得它無法用于大量數字,但對于少量數字卻表現出色。
6.穩定和不穩定排序算法之間的區別? ( 回答 )
這是一個棘手的概念,直到很久以前我才知道。 我還沒有遇到過這種情況的任何實際用例,但只是從訪談的角度知道這個概念還可以。 在穩定的排序算法中,即使排序后,同一元素的順序也保持不變,但是在不穩定的排序算法中,這會發生變化。 一個很好的例子是快速排序和合并排序,其中前者是不穩定的,而后者是穩定的算法。
7.什么是二叉樹的深度優先搜索算法? (解)
這是另一種流行的搜索算法,主要用于樹和圖形。 該算法首先在相同級別搜索之前先深入訪問節點,這就是為什么使用深度優先搜索算法的原因。 實施起來很棘手,但是您可以使用Stack來實現DFS或深度優先搜索算法。
8.如何實現迭代快速排序算法? ( 解決方案 )
顯然沒有遞歸:-)。 如果您還記得,我之前曾告訴過您,您可以使用Stack將遞歸算法轉換為迭代算法,這也是在不遞歸的情況下實現Quicksort算法的方法。 如果您需要有關實施的更多幫助,則可以進一步查看該解決方案。
9.如何實現計數排序算法? ( 解決方案 )
就像我們對其他O(n)排序算法(例如Radix排序和Bucket排序)所做的一樣。 如果您不知道Counting sort是另一種整數排序算法,則可以根據較小整數的鍵對對象集合進行排序。 它具有O(n)的時間復雜度,使其比喜歡的速度更快 Quicksort和Mergesort用于一組特定的輸入。 有關更多詳細信息,請參見解決方案。
10.如何在不使用第三個變量的情況下交換兩個數字? ( 解決方案 )
另一個棘手的問題,如果您知道這個竅門,這很容易:-)如果您可以將一個數字存儲在一個數字中,然后將其減去其他數字,則可以不使用臨時變量或第三個變量就交換兩個數字
a = 3;
b = 5;
a = a + b; // 8
b = a-b; // 3 a = a — b; // 5
現在您有a = 5和b = 3,因此無需使用第三個或temp變量就可以交換數字。
11.如何實現基數排序算法? ( 解決方案 )
這是另一種具有O(n)時間復雜度的整數排序算法。 根據Wikipedia,Radix排序是一種非比較排序算法 ,該算法通過按共享相同有效位和值的單個數字對鍵進行分組,對帶有整數鍵的數據進行排序 。 您可以進一步查看該解決方案以了解實施細節。
12.如何實現插入排序算法? ( 解決方案 )
您是否曾經在您的櫥柜中布置了撲克牌或襯衫? 這兩件事之間有什么共同點? 好吧,您將下一張卡片或襯衫放到適當的位置,或者,我應該說您將下一個元素插入其適當的位置。 這就是您的插入方式。
13.編寫算法以檢查兩個矩形是否相互重疊? ( 解決方案 )
這是一個棘手的算法問題,但是如果您必須在2D數學課上聽老師講課,則可以解決此問題。 還有另一招,檢查矩形不重疊的所有條件,如果條件不成立,則表示兩個矩形相互重疊。 例如,如果一個矩形的上側低于其他矩形的下側,則它們在垂直對齊時不會重疊。
14.合并排序算法如何實現? ( 解決方案 )
與快速排序類似,合并排序也進行了劃分和征服算法,即您可以對數組進行劃分,直到可以對數組中最小的數組進行排序,例如具有一個或零個元素的數組。 對小數組進行排序后,可以將它們合并以獲得最終結果。
Quicksort和Mergesort之間的唯一區別是mergesort是穩定的,而Quicksort是不穩定的。 這意味著相等元素在排序之前和之后都保留其位置。
另一個值得注意的區別是,即使兩者均具有O(NLogN)的平均時間,使用Quicksort還是比mergesort更好,因為對于相同數量的輸入,Quicksort花費的時間更少,而Quicksort中的常數因子比merge sort少。
15.如何實現存儲桶排序算法? ( 解決方案 )
Bucket排序是另一個很棒的算法,可以對數組進行排序,甚至不比較元素。 它被稱為非比較排序算法,可以為所選輸入提供O(n)性能。
16.編寫算法以檢查兩個字符串是否為字母( 解決方案 )
字謎是長度和字符匹配但順序不匹配的東西,例如Army和Mary都具有相同數量的字符。 解決此問題的一個技巧是對字符進行排序并檢查它們是否相同。
17.用您喜歡的編程語言實現QuickSort算法嗎? ( 解決方案 )
這是一種非常簡單的排序算法,但是只有當您練習過之后,否則您可能會迷路。 請記住,Quicksort是一種分而治之的算法,這意味著您可以保持數組的劃分,也稱為分區。 然后,您可以在最小級別上解決問題,也稱為基本案例,例如您的數組僅包含一個或零個元素時。
18.如何檢查兩個String是否相互旋轉? ( 解決方案 )
有一個簡單的技巧可以解決此問題,只需將String與自身連接起來,然后檢查旋轉是否存在。 如果串聯的String包含旋轉,則給定的String是前者的旋轉。
19,比較和非比較排序算法之間的區別? ( 回答 )
顧名思義,在基于比較的排序算法中,您必須像對快速排序一樣對元素進行排序,但是在諸如計數排序之類的基于非比較的排序算法中,可以不對元素進行比較。 驚訝嗎 好吧,那么,我建議您閱讀本課程,以了解有關O(n)排序算法的更多信息,例如基數排序,計數排序和存儲桶排序。
20.實現素數的Eratosthenes算法篩? ( 解決方案 )
這是很難實施的算法之一,尤其是如果您不記得的話:-)有時候面試官會給您解釋,而其他時候則需要記住它。
這些是數據結構和算法之外的一些最常見問題,可幫助您在面試中表現出色。
我還在博客上分享了很多這些問題,因此,如果您真的很感興趣,可以隨時去那里搜索。
您需要了解這些常見的編碼, 數據結構和算法問題 ,才能成功采訪任何規模的編程公司的大小公司。
如果您正在尋找2019年的編程或軟件開發工作,則可以使用此編碼問題列表開始準備工作。
該列表提供了準備的好主題,還有助于評估您的準備工作以找出您的長處和短處。
良好的數據結構和算法知識對于成功進行訪談采訪至關重要,因此您應該集中精力進行訪談。
結束語
謝謝,您到了本文的結尾……祝您編程采訪順利! 這當然不是一件容易的事,但是通過遵循此搜索和排序算法問題,您比其他人邁出了一步。
如果你喜歡這篇文章,那么請一起分享你的朋友和同事,不要忘記遵循javarevisited Twitter和javinpaul以及!
翻譯自: https://www.javacodegeeks.com/2019/04/searching-sorting-algorithms-interview-questions-programmers.html
總結
以上是生活随笔為你收集整理的程序员的前20个搜索和排序算法面试问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机串号查询网(手机串号哪里查)
- 下一篇: maven mockito_如何:测试M