1.最大空間為6的循環隊列隊頭front為3,隊尾rear為0,刪除一個插入兩個元素后的front和rear為多少?
我感覺這道題說的不太清楚,原因如下:對于對于循環隊列有不同實現,可以采用鏈表的形式也可以采用數組的形式;另外即使是采用數組這種結構也有兩種常用的實現方式,一種是采用一個標量來表明隊列是空的 還是滿的,也可以采用空一個元素的方式來表示隊列是空還是滿。
根據題意應該是采用數組的形式且有一個元素沒有使用,所以解題思路如下:刪除元素是在隊頭,所以刪除一個元素后隊頭是4;插入元素是在隊尾進行,所以插入兩個元素后隊尾是2。
個人感覺我的答案好像不太正確,請高手指點,謝謝。
2.N個結點的二叉樹,有m個結點有兩個子結點,有多少個葉子結點。
本來以為這道題會做了并且還很簡單,但是當要寫出來的時候才發現原來的想法完全是錯誤的。懇請高人賜教。
3.有1000瓶水,其中有一瓶有毒,小白鼠只要嘗一點帶毒的水24小時后就會死亡,至少要多少只小白鼠才能在24小時時鑒別出那瓶水有毒。
這道題我原來也意味最少也需要有999個小白鼠才能鑒別出來,但是我感覺這個答案肯定是錯的;所以就百度了一下,發現有人說是10個小白鼠足矣,但是我看了看接下來的解釋,還是沒有看懂;但是我感覺他說的是對的,所以我想了大半天終于想明白了,回頭看看網上關于這道題的解答確實不太容易讓人明白。
閑話少說,我的分析如下:
一般情況下大家看到這道題的時候都會認為是999個小白鼠,那么為什么會有這種錯誤的想法呢?那是因為大家在思考的時候進入了一個誤區,這個誤區就是每只小白鼠只能喝一個瓶子里的水。其實產生這個誤區也是很正常的,那么怎么才能在小白鼠喝了不同瓶子里的水的情況下也能知道哪個瓶子里的水是害死小白鼠的呢?請看下面我舉的一個例子。
為了簡單起見,我假設只有5平水,其中一瓶有毒,其他條件不變,那么按照上面的說法答案應該是4。
現在我有三只小白鼠,它們的編號是1,2,3;五個瓶子編號是1,2,3,4,5。讓1號小白鼠喝一號瓶子里的水,注意1號瓶子用二進制表示是00000001;然后讓二號小白鼠喝2號瓶中的水,注意2號瓶子用二進制表示是00000010;然后讓一號和二號小白鼠喝3號瓶中的水,注意3號瓶子用二進制表示是00000011;然后讓三號小白鼠喝4號瓶中的水,注意4號瓶子用二進制表示是00000100;然后讓一號和三號小白鼠喝5號瓶中的水,注意5號瓶子用二進制表示是00000101。那么如果1號瓶子是有毒的話1號小白鼠在24小時后死去;如果2號瓶里的水是有毒的話2號小白鼠24小時后死去;如果3好瓶子水有毒,24小時后1號和2號小白鼠死去;如果4號瓶水有毒24小時候3號小白鼠死去;如果5好瓶里的水有毒24小時候死去的應該是1號和3號小白鼠。
綜上所述鑒定5瓶水是不是有毒只需要3個小白鼠!并且有些小白鼠喝了不只一個瓶子里的水。
大家請注意這樣一個事實:需要鑒定5個瓶子里的水,而5的二進制表示是00000101;為了表示5最多使用了3個二進制位。
請大家按照上面的方法舉幾個例子,例如有6、7、8、9瓶水需要鑒定。通過舉這些例子后是不是得到一個結論:用二進制表示需要鑒定的瓶子數量,該二進制表示所占用的二進制位的個數就是需要的小白鼠的數量。
根據上面的結論,1000需要10個二進制位來表示,所以這道題的答案是需要10個小白鼠!
怎么樣是不是比需要犧牲999個小白鼠更愛護小動物。
但是上面的這種方法只是一種基于一些有限的例子歸納出來的,并不十分可靠。我當時根據上面的例子推導之后已經知道了答案,但是總還感覺缺少點什么。好像還沒有太明白,也好像缺少了一些說服力,因為畢竟是有限的歸納。
好了,下面就是絕對有說服力的解法:
還是上面的第一個例子,總共有5個瓶子,需要3只老鼠;如果某個老鼠喝了水,我們就在記為1,如果老鼠沒有喝那么就記為0;我們用3個二進制位表示記錄情況,最左邊的二
進制位代表3號老鼠,中間的二進制位代表2號老鼠,最右邊的老鼠代表1號老鼠。
1號瓶里的水被1號老鼠喝了,那么是不是應該寫一個1其余的記為0,那么是不是可以寫為001。
2號瓶里的水被2號老鼠喝了,那么是不是應該寫一個1其余的記為0,那么是不是可以寫為010。
3號瓶里的水被1號和2號老鼠喝了,那么是不是應該寫兩個1其余的記為0,那么是不是可以寫為011。
4號瓶里的水被3號老鼠喝了,那么是不是應該寫一個1其余的記為0,那么是不是可以寫為100。
5號瓶里的水被3號和1號老鼠喝了,那么是不是應該寫兩個1其余的記為0,那么是不是可以寫為101。
通過上面的例子是不是發現就相當于用老鼠喝不喝瓶里的水來表示數字。用10個老鼠可以表示10個二進制位,那么10個二進制位是不是可以表示最大的1024,并且每種表示法都是唯一的。
不知道通過以上的說法是否明白了,如果還不太明白請仔細看幾遍可能就明白了。
4.有一整數序列,如何求絕對值和最大的連續數字串,寫出算法。
我看到這道題是不太明白“絕對值和”是什么意思,所以導致我不明白這個題到底要求寫什么。我的理解是這樣的:一個整數數列,當然可能有正的也有負數,求出子數字串
的最大和是多少。舉個例子:數列是-1,-2,0,89,100, -90,那么最大的和就是89+100。
如果是按照我的理解的話這道題的答案在《數據結構和算法分析 --C語言描述》的21頁。我就不在這里再說了。
5.假設有很多段ip段屬于教育網的,如何盡快辨別一用戶 ip是否屬于教育網。
我對網絡不熟,所以不知道以下我的說法是否正確,如果不正確請高手指教。
IP地址分為網絡號和主機號,只要對某個IP與教育網的IP的網絡好進行與運算即可,如果運算后還等于教育網的網絡號,則是教育網的IP。
6.用java實現二叉樹數據。
不太明白實現二叉樹數據是什么意思,是讓寫一個結點的類型,然后寫一個創建二叉樹的函數嗎,當然了既然是用JAVA這種面向對象的語言實現的,所以一定要用類的方法實現。另外我對JAVA不熟悉,不知道JAVA里是否有模板類的說法,如果有的話最好用模板類的方法實現,這樣的話不需要考慮二叉樹所保存的數據的類型。
具體代碼請參見各種數據結構的書,一般這類書都會有講解的,二叉樹也不太難。
7.構造AVL樹。
正在看AVL樹,所以當前還不能多說些什么。請高手評論這道題。
這篇隨筆里最讓我高興的一點就是把地三題想明白了。
請各位高手批評指正。
posted on 2010-05-10 20:20
OnTheWay 閱讀(2618)
評論(14) 編輯 收藏 引用 所屬分類:
面經