国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

LintCode 堆化詳解及實例代碼

2020-01-26 14:10:51
字體:
來源:轉載
供稿:網友

LintCode 堆化詳解及實例代碼

給出一個整數數組,堆化操作就是把它變成一個最小堆數組。

對于堆數組A,A[0]是堆的根,并對于每個A[i],A [i * 2 + 1]是A[i]的左兒子并且A[i * 2 + 2]是A[i]的右兒子。

樣例

給出 [3,2,1,4,5],返回[1,2,3,4,5] 或者任何一個合法的堆數組

挑戰

O(n)的時間復雜度完成堆化

說明

什么是堆?

堆是一種數據結構,它通常有三種方法:push, pop 和 top。其中,“push”添加新的元素進入堆,“pop”刪除堆中最小/最大元素,“top”返回堆中最小/最大元素。

什么是堆化?

把一個無序整數數組變成一個堆數組。如果是最小堆,每個元素A[i],我們將得到A[i * 2 + 1] >= A[i]和A[i  * 2 + 2] >= A[i]
如果有很多種堆化的結果?

返回其中任何一個。

分析:一開始想到堆化么肯定就是堆排序吧,粗粗一想貌似復雜度是O(nlgn),后來參考該文章才知道O(nlgn)是復雜度上限,平均是O(n)

代碼:

class Solution { public:   /**    * @param A: Given an integer array    * @return: void    */   void heapify(vector<int> &A) {     // write your code here     int n = A.size()-1;     for(int i=n/2;i>=0;i--)       heapify(A,i);   }   void heapify(vector<int> &A,int i)   {     int l = 2*i+1;     int r = 2*i+2;     int smallest = i;     if(l<A.size()&&A[l]<A[smallest])       smallest = l;     if(r<A.size()&&A[r]<A[smallest])       smallest = r;     if(smallest!=i)     {       swap(A[i],A[smallest]);       heapify(A,smallest);     }   } }; 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 东兰县| 兰西县| 高阳县| 高雄市| 闽侯县| 甘泉县| 安宁市| 鄢陵县| 乐东| 诸城市| 英超| 麦盖提县| 鸡东县| 绥芬河市| 陇南市| 尉犁县| 绥阳县| 江都市| 宣武区| 新巴尔虎左旗| 延长县| 英德市| 正蓝旗| 宁晋县| 黔西| 竹山县| 邮箱| 称多县| 招远市| 赣州市| 公安县| 达拉特旗| 宜丰县| 松原市| 汉阴县| 内乡县| 江孜县| 涿鹿县| 舒城县| 湘阴县| 遂溪县|