總結幾道經典面試筆試題

1,一個5升的容器,一個3升的容器,都是不規則的,如何得到4升的水
答(1) 將5升的容器裝滿,然後倒到3升的容器,這樣5升的容器還有2升的水
(2) 在裝滿3升的容器裏,將水倒掉,然後把5升容器中的2升水倒到3升的容器中。
(3) 將5升的容器重新裝滿水,把水倒到已經裝好2升的3升容器中,直至3升的容器已經滿。
(4) 這樣5升容器中實質倒1升到3升的容器中,就剩下 4 升水。
有一個邏輯題目,說有10箱蘋果,每箱蘋果有10個蘋果,其中有9箱每箱每個蘋果的重量是一斤,還有1箱裏面所有的蘋果重量都是9兩,現在有一個稱,只能稱一次,怎麼找出蘋果都是9兩的那一箱?
0) 一根不均勻的繩子, 從頭到尾燒需要整整一個小時燒完,有很多條同樣的繩子,請問我該怎麼做才能得到1小時15分鐘呢?

答案:準備3條繩子,第一條兩頭點燃,第二條一頭點燃,第三條暫時不點燃;第一條燒盡時,過了半個小時,與此同時,第二條還剩一半,第三條完整;第二條另一端點燃,第三條不動;第二條燒盡時,又過了15分鐘;第三條兩頭點燃,燒盡時要30分鐘,共1小時15分中;

1)各大網絡公司都喜歡問,比如說給你兩個存放有10G個名字的文件,每個名字需要64個字節,你的電腦只有4G內存,問怎樣找到兩個文件中相同的名字(假設單個文件中沒有重複)。
這個問題其實代表了很常見的一類問題,即大數據的處理問題,這類問題通常的做法是使用hash函數將大文件中的數據放到內存可以放下的小文件中,然後調用普通方法(如內存中的統計,排序)進行處理。上面的問題每個文件有640G的大小,按照內存4G處理,可以把兩個文件分成320個小文件,然後對每個名字進行hash處理,分到320小文件中,然後將小文件讀到內存中進行名字統計,如果摸個名字出現了兩次則是兩個文件中重複的。
(2)給你10個盛放藥品的瓶子,其中9個是放的是A,另一個放的B,A和B放到一起會在60分鐘後變色,問給你70分鐘,問至少需要幾隻試管可以測出那隻瓶子中存放的是B。
問題很高級,解法很巧妙,首先將十隻瓶子進行編號(0000,0001,0010,0011,0100,0101,0110,0111,1000,1001),然後取四隻試管,分別代表四位,將相應位爲1的藥瓶中的藥品取少量放入試管中,等待60分鐘後,變色的位代表1,不變色的代表0,這樣就找到盛有B藥品的藥瓶編號,所以四個試管就可以找出盛有B藥品的藥瓶。
(3)有1000盞等,編號從1到1000,有1000個人,編號從1到1000,所有的燈開始都是滅的,每個人必須對是他自身編號倍數(如3可以對3,6,9…號燈進行操作)的燈進行一次操作,如果燈是亮的就按滅他,否則按亮他。問所有的人都操作成後,所有的燈是什麼狀態。
可以通過特例來進行分析,如16和20,9可以被1,16,2,8,4操作,然後他是亮的,20可以被1,20,2,10,4,5操作,最後他是滅的,所以對於一個數N,只要有一個數x可以整除他,那必定有一個y存在,y=N/x,所以他們這樣的數對N的操作可以抵消,只有當x=y時不能被抵消,即N開方是整數時,不可以被抵消,這樣的燈是亮的,其餘的燈是滅的。
(4)給你一個函數f(),他以概率p產生0,以概率1-p產生1,問如何生成一個函數g(),以相同的概率產生0和1。
問題很巧妙,要求你用f()生成兩種概率相等的狀態就行,其他變種也都差不多,也是找到n中概率相等的狀態就可以了。如使用f()兩次,可以產生(0,0),(0,1),(1,0),(1,1),顯然產生(0,1),(1,0)狀態就是相等的,產生其他狀態是可以在重複調用兩次f()直到產生需要的兩種狀態位置,這樣就構造除了g()函數。
(5)給你一個大小爲N的數組int[] A,求取N個乘積,第i個乘積爲除去A[i]的數組中所有數的乘積,不能用除法,問如何在O(n)的時間複雜度內,求的所有的N個乘積。
這個問題是明顯的空間換時間的問題,可以對數組遍歷兩遍求取所有數組的從前到後,從後到前的部分積,如現在要求第i個乘積,只需取出從1到i-1的部分積和從N到i+1的部分積相乘就可以了,總共進行了3N次操作,時間複雜度爲O(N)。
(6)給你一個天平,稱三次,問最多可以從多少個小球中找到質量較輕的一個。
答案是27個,因爲天平每次可以將小球分成三組,並可以判斷質量較輕的那個小球在那一組中,三次就可以找出較輕的那個。
7.平衡點問題
平衡點:比如int[] numbers = {1,3,5,7,8,25,4,20}; 25前面的總和爲24,25後面的總和也是24,25這個點就是平衡點;假如一個數組中的元素,其前面的部分等於後面的部分,那麼這個點的位序就是平衡點
要求:返回任何一個平衡點

8.支配點問題:
支配數:數組中某個元素出現的次數大於數組總數的一半時就成爲支配數,其所在位序成爲支配點;比如int[] a = {3,3,1,2,3};3爲支配數,0,1,4分別爲支配點;
要求:返回任何一個支配點

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章