樹的高度;及字母表分析
今日面試題:樹的高度
有一個棵樹,不一定是二叉樹,有n個節點,編號為0到n-1。有一個陣列A,陣列的索引為0到n-1,陣列的值A[i]表示節點i的父節點的id,根節點的父節點id為-1。給定陣列A,求得樹的高度。
=====================================================
字母表分析
原題
每一種語言,都有自己的字母表,類似英文的a-z,但是順序不相同。例如,有的語言可能是z是第一個之類的。
現在給定這個語言的字典,請分析這個字典,得到這個語言的字母表的順序。 例如:有如下的字母:
1. C
2. CAC
3. CB
4. BCC
5. BA
經過分析,得到字母表為C->A->B。
分析
這個題目,在給出例子的時候,結果寫作:C->B->A,這個是疏忽了,幸好很多同學都發現了,沒有引起太多的舞蹈。
所以,在這裡很感謝大家指出問題所在,並且,如果在分析中,大家有覺得不合適的地方,也請大家指出。稍後,會在待字閨中或者微博中說明,真切的希望更多的同學受益。
這個題目其實是比較簡單的一個題目。可能題目描述上,有點嚇人,其實理解了之後,就會發現,還是蠻簡單的。
這個題目的關鍵就在於:
字典其實隱含了字母的順序的
這個是很自然的,如果沒有想到這一點,這個題目任意解都可以的。而字典有序,是可以作為一個常識的。我們延續題目中的例子進行分析。
首先,C一定是在B之前的,這個是由字典本身的屬性決定的。那麼剩下的如何考慮呢?比較完第一個字母不同的情況,則比較第一個字母相同的情況。
考慮C和CA,根據我們的經驗,A一定是在C後面的,如果A在C的前面,則應該是CA,C的順序。這樣:
- 根據C和CAC,我們得到C->A(表示C在A的前面,後面同理)
- 根據CAC和CB,我們得到A->B
- 根據CB和BCC,我們得到C->B
綜合,我們有C->A,A->B,C->B這三個關係,但是,還沒有結束。根據這三組關係,如何得到CAB的關係呢? 這三組關係,構成了一個有向無環圖,很自然就想要要用拓撲排序得到CAB之間的整體排序。
拓撲排序的演算法,不在這裡詳述,總結一下這個題目的思路:
- 構建有向無環圖:按照字典中單詞的順序,每兩個進行比較,找到第一對不相同的字母,確定他們的順序
- 對有向無環圖進行拓撲排序
構建有向無環圖的時間複雜度為O(N*M),N是字典中單詞數目,M是單詞長度;有向圖拓撲排序的時間複雜度是O(|V|+|E|)。
這個題目,並不是難題,解決的過程中,僅僅抓住字典的特點即可。
【分析完畢】
本文來自微信:待字閨中,2013-08-27釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。
相關文章
- 陣列統計;及樹的高度分析陣列
- 字母表;及查詢提示分析
- 求二叉樹的高度二叉樹
- 二叉樹——高度二叉樹
- 二叉樹的最小高度,最大高度(深度)和寬度二叉樹
- 演算法 最小高度樹演算法
- Linux裝置樹的傳遞及Kernel中對裝置樹的分析Linux
- css實現固定高度及未知高度文字垂直居中的完美解決方案CSS
- 建立一顆二叉樹,並求它的高度 7074二叉樹
- 二叉搜尋樹(Binary Search Tree )的定義及分析
- 1501 二叉樹最大寬度和高度二叉樹
- 建立二叉樹:層次遍歷--樹的寬度高度,後序遍歷--祖先節點二叉樹
- FA分析樹
- 程式設計師的技能樹,決定了一生職業的高度程式設計師
- 資料分析 | APP觸屏按鈕的高度為多少?APP
- 樹2-二叉樹複製, 遍歷, 計算葉子結點和高度二叉樹
- 徹底理解紅黑樹及JavaJDK1.8TreeMap原始碼分析JavaJDK原始碼
- js將陣列中的字串執行字母表排序JS陣列字串排序
- 二叉樹的深度、寬度遍歷及平衡樹二叉樹
- Python資料結構——解析樹及樹的遍歷Python資料結構
- 怎麼實現通訊錄字母表
- Android ViewTreeObserver使用總結及獲得View高度的幾種方法AndroidViewServer
- UITableViewCell的高度快取UIView快取
- 高度自定義的STDPickerViewView
- 動態生成DOM元素的高度及行數獲取與計算方法
- MySQL之B+樹分析MySql
- 比特幣區塊結構Merkle樹及簡單支付驗證分析比特幣
- 線索二叉樹的原理及建立二叉樹
- 二叉樹的遍歷及應用二叉樹
- 設定div高度等於螢幕高度
- MySql資料儲存格式Compact及計算MySql的B+Tree高度MySql
- 將手機號轉化為由隨機字母表示隨機
- 設定document物件的高度物件
- TARA攻擊樹分析方法論
- 三、遞迴樹分析法遞迴
- Latex排版學習筆記(1)——希臘字母表及其在latex中的表示筆記
- 配合Masonry實現TableViewCell的高度自適應,以及更易管理的高度快取View快取
- 微信小程式swiper高度自適應,swiper的子元素高度不固定微信小程式