陣列統計;及樹的高度分析

紫鳳發表於2013-09-09

今日面試題:陣列統計

給定陣列A,大小為n,陣列元素為1到n的數字,不過有的數字出現了多次,有的數字沒有出現。請給出演算法和程式,統計哪些數字沒有出現,哪些數字出現了多少次。能夠在O(n)的時間複雜度,O(1)的空間複雜度要求下完成麼?

================================================

樹的高度分析

原題

有一個棵樹,不一定是二叉樹,有n個節點,編號為0到n-1。有一個陣列A,陣列的索引為0到n-1,陣列的值A[i]表示節點i的父節點的id,根節點的父節點id為-1。給定陣列A,求得樹的高度。 分析這個題目我們首先把陣列寫出來,然後進一步分析,就很明瞭了,如下例子: 333-1201234根據題意:

  • 節點0,1,2的父節點為3

  • 節點3是根節點

  • 節點4的父節點為2

一個很直接的解法是,遍歷陣列A中的每一個元素,回溯到根節點,得到這個節點的高度。遍歷完畢陣列之後,取最大的,就是樹的高度。上面的例子大概過程如下:

  • 0->3->-1,得到0到到根的高度為2,同理1->3->-1, 2->3->-1

  • 3->-1,高度就是1

  • 4->2->3->-1,得到高度3

綜上,最大的高度是3,則樹的高度為3。這個方法的時間複雜度為O(n^2),空間複雜度為O(1)。

那麼是否能夠繼續改進呢?通過上面的計算過程,我們可以發現,在計算4->2->3->-1的時候,顯然2->3->-1已經計算過了,不需要再浪費時間重新計算一遍。示例程式碼如下:

enter image description here

【分析完畢】

本文來自微信:待字閨中,2013-08-28釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。

相關文章