LintCode 堆化详解及实例代码

发布时间 - 2026-01-11 00:49:19    点击率:

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); 
    } 
  } 
}; 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# LintCode  # 堆化  # 堆化详解  # 堆化实例  # LintCode-排序列表转换为二分查找树分析及实例  # 任何一个  # 堆中  # 是一种  # 把它  # 数据结构  # 才知道  # 希望能  # 谢谢大家  # 有三种  # 样例  # 有很多种  # push  # code  # size  # write  # gt  # pop  # top  # smallest  # swap 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  如何确保FTP站点访问权限与数据传输安全?  Laravel如何处理表单验证?(Requests代码示例)  微信小程序 五星评分(包括半颗星评分)实例代码  中山网站推广排名,中山信息港登录入口?  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  php结合redis实现高并发下的抢购、秒杀功能的实例  如何批量查询域名的建站时间记录?  ,交易猫的商品怎么发布到网站上去?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  如何实现javascript表单验证_正则表达式有哪些实用技巧  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  微信小程序 scroll-view组件实现列表页实例代码  Linux系统命令中tree命令详解  详解jQuery停止动画——stop()方法的使用  北京网站制作的公司有哪些,北京白云观官方网站?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  linux写shell需要注意的问题(必看)  如何在建站主机中优化服务器配置?  如何快速搭建支持数据库操作的智能建站平台?  晋江文学城电脑版官网 晋江文学城网页版直接进入  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  如何在云主机上快速搭建多站点网站?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  图册素材网站设计制作软件,图册的导出方式有几种?  Laravel如何实现数据库事务?(DB Facade示例)  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  制作公司内部网站有哪些,内网如何建网站?  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  Laravel如何使用Blade模板引擎?(完整语法和示例)  Laravel PHP版本要求一览_Laravel各版本环境要求对照  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  Laravel如何使用Livewire构建动态组件?(入门代码)  Laravel怎么在Blade中安全地输出原始HTML内容  再谈Python中的字符串与字符编码(推荐)  Laravel如何创建自定义Artisan命令?(代码示例)  JavaScript Ajax实现异步通信  Laravel路由怎么定义_Laravel核心路由系统完全入门指南