LintCode中堆化的示例分析

  介绍

这篇文章将为大家详细讲解有关LintCode中堆化的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

<强> LintCode堆化详解及实例代码

给出一个整数数组,堆化操作就是把它变成一个最小堆数组。

对于堆数组,一个[0]是堆的根,并对于每一个[我],[我* 2 + 1]是一个[我]的左儿子并且[我* 2 + 2]是一个[我]的右儿子。

样例

给出[3、2、1、4、5),返回(1、2、3、4、5)或者任何一个合法的堆数组

挑战

O (n)的时间复杂度完成堆化

<强>说明

什么是堆?

堆是一种数据结构,它通常有三种方法:推动,流行和最高。其中,“推”添加新的元素进入堆,“流行”删除堆中最?最大元素,“顶级”返回堆中最?最大元素。

什么是堆化?

把一个无序整数数组变成一个堆数组。如果是最小堆,每个元素[我],我们将得到一个[我* 2 + 1]祝辞=[我]和[小姐:* 2 + 2]祝辞=A[我]
如果有很多种堆化的结果?

返回其中任何一个。

分析:一开始想到堆化么肯定就是堆排序吧,粗粗一想貌似复杂度是O (nlgn),后来参考该文章才知道O (nlgn)是复杂度上限,平均是O (n)

代码:

class  Solution  {,   公众:/* *,才能   ,,*,@param 答:,Given  an  integer  array    ,,*,@return:, void    ,,*/,   void 才能;heapify (vector,, A), {,   ,,,//,write  your  code  here    ,,,int  n =, A.size () 1,,   ,,,(int 我=n/2; i>=0;我——),   ,,,,,heapify(我),   ,,},   void 才能;heapify (vector,, A, int  i),   ,{大敌;   ,,,int  l =, 2 *我+ 1,,   ,,,int  r =, 2 *我+ 2,,   ,,,int  smallest =,我,,   ,,,如果(l

关于“LintCode中堆化的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看的到。

LintCode中堆化的示例分析