題目29 一些簡單的演算法練習題(3)

2021-05-07 13:38:59 字數 1319 閱讀 6627

problem 1.

乙個完全二叉樹有386個葉子節點,問它總共有多少個葉子節點。

分析:386個葉子節點,那麼它的上層可以確定的非葉子節點有多少個呢?

可以用試探法得到,它上面應該有7層,即非葉子節點數應該有2^8 - 1

= 255個。

根據總的葉子節點數,可以知道第8層一定有葉子節點,可以設第

8層非葉子節點數為x, 葉子節點數為y. 則得到乙個方程 x + y = 256

第8層非葉子節點數為x,則第9層葉子節點數為2*x 或者2*x - 1個。由

於知道總的葉子節點數,所以可以得到方程2*x + y = 386 或者

2*x -1 +y = 386.

連解這些方程對:

1.   x + y = 256                    2.     x+y = 256

2*x + y = 386                        2*x -1 +y = 386

解得:1. x = 130                                     x = 131

y  = 126                                    y = 125

從而我們可以知道總的節點數為255+386+130 = 771或者

255+386+131 = 772個。

problem 2.

情形1:乙個陣列,其中只有乙個數隻出現一次,其餘數皆

出現偶數次。設計time: o(n) space: o(1)的演算法得出那個只出現一次的數。 

情形2:如果只有兩個數隻出現一次呢?

分析: 1. 只出現一次的話好辦,將所有的數異或,得到的最後結果就是

我們所要求的那個數。

2. 兩個的情形複雜一點,先將所有的數異或得到乙個數,然後得

到這個數的二進位制表示,找到第乙個為1的位,然後判斷這個陣列中所有的

數,判斷這個位是否為1, 是1的劃到乙個陣列中去,如果是0的話,劃分

到另外乙個陣列中去。現在我們的這兩個陣列肯定都只含乙個數隻出現一次

其他數全部出現兩次。分別對兩個陣列做異或操作,得到的這兩個數即是我們

要求的的兩個數。

problem 3 :

什麼是你的不可替代性和核心競爭力?

從ponba部落格上看到的文章,這個問題確實值得我們去思考,只有想清楚了,我們才知

道如何採取行動。詳細可以參看ponba的文章:

摘錄一些ponba認為可以成為核心競爭力的方面:

題目19 一些簡單的演算法練習題 1

1.比較兩個字串,用o n 時間和恒量空間。源 2.假設你有乙個用1001個整數組成的陣列,這些整數是任意排列的,但是你知道所有的整數都在 1到1000 包括1000 之間。此外,除乙個數字出現兩次外,其他所有數字只出現一次。假設你只 能對這個陣列做一次處理,用一種演算法找出重複的那個數字。如果你在...

題目28 一些簡單題的演算法練習題(2)

宣告 這些題目都是從網際網路上蒐集而來,有些解法屬於原創,有些解法屬於 的智慧型,從部落格上找來的解法都會給出鏈結,論壇上的討論就不給出鏈結了。1.不用中間變數,實現strlen函式。strlen為c語言中求給字串長度庫函式 int strlen const char str 解法比較明顯,不讓用臨...

一些簡單的程式設計練習題

每當成為入門cs課程 學生們學習程式語言的課程 的助教時,都困於提出好的練習題。project euler和類似的問題通常對初學者來說來難了,尤其是對於那些沒有很強數學背景的同學。在這篇文章中,adrian neumann 收集了一些從初級到高階逐級困難的練習題,適合剛開始學習程式設計的初學者。當有...