1. 程式人生 > >資料結構與演算法-----常問面試題

資料結構與演算法-----常問面試題

資料結構

  • 陣列

尋找陣列中第二小的元素

找到陣列中第一個不重複出現的整數

合併兩個有序陣列

重新排列陣列中的正值和負值

使用棧計算字尾表示式

對棧的元素進行排序

判斷表示式是否括號平衡

  • 佇列

使用隊列表示棧

對佇列的前k個元素倒序

使用佇列生成從1n的二進位制數

  • 連結串列

反轉連結串列

檢測連結串列中的迴圈

返回連結串列倒數第N個節點

刪除連結串列中的重複項

  •                                         

求二叉樹的高度                                                           實現廣度和深度優先搜尋

在二叉搜尋樹中查詢第k個最大值                                           檢查圖是否為樹

查詢與根節點距離k的節點                                                 計算圖的邊數

在二叉樹中查詢給定節點的祖先節點                                         找到兩個頂點之間的最短路徑

演算法

1)解釋什麼是快速排序演算法?

快速排序演算法能夠快速排序列表或查詢。它基於分割交換排序的原則,這種型別的算法佔用空間較小,它將待排序列表分為三個主要部分:小於Pivot

的元素、樞軸元素Pivot(選定的比較值)、大於Pivot的元素

2)解釋演算法的時間複雜度?

演算法的時間複雜度表示程式執行完成所需的總時間,它通常用大O表示法來表示。

3)請問用於時間複雜度的符號型別是什麼?

用於時間複雜度的符號型別包括:Big Oh:它表示小於或等於目標多項式、Big Omega:它表示大於或等於目標多項式、Big Theta:它表示與目標多項式相等、Little Oh:它表示小於目標多項式、Little Omega:它表示大於目標多項式

4)解釋二分法檢索如何工作?

在二分法檢索中,我們先確定陣列的中間位置,然後將要查詢的值與陣列中間位置的值進行比較,若小於陣列中間值,則要查詢的值應位於該中間值之前,依此類推,不斷縮小查詢範圍,直至得到最終結果。

5)解釋是否可以使用二分法檢索連結串列?

由於隨機訪問在連結串列中是不可接受的,所以不可能到達O1)時間的中間元素。因此,對於連結串列來說,二分法檢索是不可以的(對順序連結串列或排序後的連結串列是可以用的)。

6)解釋什麼是堆排序?

堆排序可以看成是選擇排序的改進,它可以定義為基於比較的排序演算法。它將其輸入劃分為未排序和排序的區域,通過不斷消除最小元素並將其移動到排序區域來收縮未排序區域。

7)說明什麼是Skip list

Skip list資料結構化的方法,它允許演算法在符號表或字典中搜索、刪除和插入元素。在Skip list中,每個元素由一個節點表示。搜尋函式返回與key相關的值的內容。插入操作將指定的鍵與新值相關聯,刪除操作可刪除指定的鍵。

8)解釋插入排序演算法的空間複雜度是多少?

插入排序是一種就地排序演算法,這意味著它不需要額外的或僅需要少量的儲存空間。對於插入排序,它只需要將單個列表元素儲存在初始資料的外側,從而使空間複雜度為O1)。

9)解釋什麼是“雜湊演算法”,它們用於什麼?

“雜湊演算法”是一個雜湊函式,它使用任意長度的字串,並將其減少為唯一的固定長度字串。它用於密碼有效性、訊息和資料完整性以及許多其他加密系統。

10)解釋如何查詢連結串列是否有迴圈?

要知道連結串列是否有迴圈,我們將採用兩個指標的方法。如果保留兩個指標,並且在處理兩個節點之後增加一個指標,並且在處理每個節點之後,遇到指標指向同一個節點的情況,這隻有在連結串列有迴圈時才會發生。

11)解釋加密演算法的工作原理?

加密是將明文轉換為稱為“密文”的密碼格式的過程。要轉換文字,演算法使用一系列被稱為“鍵”的位來進行計算。金鑰越大,建立密文的潛在模式數越多。大多數加密演算法使用長度約為64128位的固定輸入塊,而有些則使用流方法。

12)列出一些常用的加密演算法?

一些常用的加密演算法是:3-wayBlowfishCASTCMEAGOSTDES Triple DESIDEA

13)解釋一個演算法的最佳情況和最壞情況之間有什麼區別?

·最佳情況:演算法的最佳情況解釋為演算法執行最佳的資料排列。例如,我們進行二分法檢索,如果目標值位於正在搜尋的資料中心,則這就是最佳情況,最佳情況時間複雜度為0

·最差情況:給定演算法的最差輸入參考。例如快速排序,如果選擇關鍵值的子列表的最大或最小元素,則會導致最差情況出現,這將導致時間複雜度快速退化到On2)。

14)解釋什麼是基數排序演算法?

基數排序又稱“桶子法”,是通過比較數字將其分配到不同的“桶裡”來排序元素的。它是線性排序演算法之一。

15)解釋什麼是遞迴演算法?

遞迴演算法是一個解決複雜問題的方法,將問題分解成較小的子問題,直到分解的足夠小,可以輕鬆解決問題為止。通常,它涉及一個呼叫自身的函式。

16)提到遞迴演算法的三個定律是什麼?

遞迴演算法必須有一個基點、遞迴演算法必須有一個趨向基點的狀態變化過程、遞迴演算法必須自我呼叫

17)解釋什麼是氣泡排序演算法?

氣泡排序演算法也稱為下沉排序。在這種型別的排序中,要排序的列表的相鄰元素之間互相比較。如果它們按順序排列錯誤,將交換值並以正確的順序排列,直到最終結果“浮”出水面。