有乙個棵樹,不一定是二叉樹,有n個節點,編號為0到n-1。有乙個陣列a,陣列的索引為0到n-1,陣列的值a[i]表示節點i的父節點的id,根節點的父節點id為-1。給定陣列a,求得樹的高度。 分析這個題目我們首先把陣列寫出來,然後進一步分析,就很明了了,如下例子: 333-1201234根據題意:
乙個很直接的解法是,遍歷陣列a中的每乙個元素,回溯到根節點,得到這個節點的高度。遍歷完畢陣列之後,取最大的,就是樹的高度。上面的例子大概過程如下:
綜上,最大的高度是3,則樹的高度為3。這個方法的時間複雜度為o(n^2),空間複雜度為o(1)。
那麼是否能夠繼續改進呢?通過上面的計算過程,我們可以發現,在計算4->2->3->-1的時候,顯然2->3->-1已經計算過了,不需要再浪費時間重新計算一遍。示例**如下:
int getheight(vector& tree,vector& height,int index)//遞迴計算節點index的高度
int treeheight(vector& tree)
} return maxheight;
}
如有問題,請指正,謝謝 待字閨中之巧妙排序分析
排序只有1,2,3三個元素的陣列,不能統計1,2,3的個數。分析 這個題目,儘管也是排序,但卻不能使用快速排序的方法。只有三個元素,如果時間複雜度仍舊是o nlogn 顯然不是最好的。那就可以使用線性的排序演算法,例如計數排序,可是題目中要求,不能夠對1,2,3進行統計個數。那該如何處理呢?請大家看...
待字閨中之巧妙排序分析
排序僅僅有1。2,3三個元素的陣列。不能統計1,2。3的個數。分析 這個題目,雖然也是排序,但卻不能使用高速排序的方法。僅僅有三個元素,假設時間複雜度仍舊是o nlogn 顯然不是最好的。那就行使用線性的排序演算法,比如計數排序。但是題目中要求,不可以對1,2,3進行統計個數。那該怎樣處理呢?請大家...
待字閨中之兄弟數字分析
給定乙個數x,他的兄弟數y定義為 是由x中的數字組合而成。而且y是大於x的數中最小的。比如,38276的兄弟數字為38627。給定x,求y。分析 這個題目當然有暴力的方法。列出全部的排列組合。然後然後找到大於x中,最小的y。即。找到兄弟數字。那有沒有更好的方法呢?不想對全部情況進行窮舉。就要想辦法,...