介绍
这篇文章将为大家详细讲解有关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中堆化的示例分析