資料結構與演算法面試題

2021-08-07 13:45:02 字數 1903 閱讀 6537

1。計算二叉樹的深度

// 獲取最大深度

public

static

intgetmaxdepth(treenode root)

}

2。折半查詢(非遞迴)

package althorgrim;  

/**

* 1、必須採用順序儲存結果

* 2、關鍵字必須有序

*@author hanrk-2734

* */

public

class

testbinarysearch

else

if (a[middle]>goal)

else

} return -1;

} /**

*@param args

*/public

static

void

main(string args) ;

system.out.println(binarysearch(src, 3));

} }

3.找到資料中最大的前兩個值

list=[1,2,5,6,3,4,5,4]

max1=0

max2=0

for i in range(len(list)):

iflist[i]>max1:

max2=max1

max1=list[i]

else:

iflist[i]>max2:

max2=list[i]

print(max1)

print(max2)

4。把字串中的連續多個空格轉換成乙個空格

str='a  b  c  d  e f     g    h'

defreplace

(str):

count = 0

strr=''

for i in range(len(str)):

if str[i]==' ':

count+=1

if count==2:

count=count-1

else:

strr=strr+str[i]

if str[i]!=' ':

count=0

return strr

print(str)

print(replace(str))

5.給定a、b兩個檔案,各存放50億個url,每個url各占用64位元組,記憶體限制是4g,如何找出a、b檔案共同的url?

(昨天參加安卓越 筆試,其中的最後一道解答題)

解答:

每個檔案 50億*

64b 約為300gb大小,記憶體肯定是裝不下了。

毫無疑問還是採用分而治之的思想:

1. 遍歷檔案a,對每個url求取hash(url)%

1000,然後根據所得值將url分別儲存到1000個小檔案(設為a0,a1,...a999)當中;

遍歷檔案b,對每個url求取hash(url)%

1000,然後根據所得值將url分別儲存到1000個小檔案(設為b0,b1,...b999)當中;

這樣處理後,所有可能相同的url都在對應的小檔案(a0-b0, a1-b1

....a999-b999)當中,不對應的小檔案(比如a0-b99)不可能有相同的url。

2. 統計1000對檔案中相同的url,採用hash_set.

比如對a0-b0,遍歷a0,將其中的url儲存到hash_set當中;

然後遍歷b0,如果url在hash_map中,則說明此url在a和b中同時存在,儲存到檔案中即可。

資料結構與演算法(六) 技術面試題

參考程式設計師面試金典 中技術面試題 1.舉例法 先列舉一些具體的例子,看看能否發現一般的規則。2.模式匹配法 將現有問題與一些類似基礎演算法問題作模擬,看看能否通過相關問題來解決新問題,往往適用排序或者查詢演算法。3.簡化推廣法 分多步走,首先修改某個約束條件,比如資料型別或者資料量,從而簡化這個...

資料結構與演算法面試題80道

問題分析 二叉查詢樹是一種二叉樹的結構,其中,根節點的值大於左子樹的值,小於右子樹的值。而二叉查詢樹的中序遍歷即為排序的結果。對於根節點,前驅指標指向左子樹中最大的節點,同理,後驅指標指向右子樹中最小的節點,如下圖所示 樹是一種遞迴的結果,因此,對於左右子樹,也需要執行相同的操作。方法 bstree...

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

資料結構與演算法 找到單鏈表的三等分點,如果單鏈表是有環的呢 用快慢指標,乙個走一步,乙個走三步。如果有環,先判斷環在哪,找最後乙個節點,然後用之前的無環的做法 從10萬個數中找最小的10個,時間複雜度分析 最小堆,考慮記憶體 我們首先取10萬個元素中的前10個元素來建立由10個元素組成的最小堆。這...