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個元素組成的最小堆。這...