130.Heapify-堆化(中等题)
来源:互联网 发布:linux mint 查看版本 编辑:程序博客网 时间:2024/05/05 07:23
堆化
题目
给出一个整数数组,堆化操作就是把它变成一个最小堆数组。
对于堆数组A,A[0]是堆的根,并对于每个A[i],A [i * 2 + 1]是A[i]的左儿子并且A[i * 2 + 2]是A[i]的右儿子。说明
什么是堆?
堆是一种数据结构,它通常有三种方法:push, pop 和 top。其中,“push”添加新的元素进入堆,“pop”删除堆中最小/最大元素,“top”返回堆中最小/最大元素。什么是堆化?
把一个无序整数数组变成一个堆数组。如果是最小堆,每个元素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)的时间复杂度完成堆化
题解
堆排序,平均时间复杂度为O(n),参看堆排序建堆复杂度为O(n)的证明。
public class Solution { /** * @param A: Given an integer array * @return: void */ public class Solution { /** * @param A: Given an integer array * @return: void */ private void siftdown(int[] A, int k) { while (k < A.length) { int smallest = k; if (k * 2 + 1 < A.length && A[k * 2 + 1] < A[smallest]) { smallest = k * 2 + 1; } if (k * 2 + 2 < A.length && A[k * 2 + 2] < A[smallest]) { smallest = k * 2 + 2; } if (smallest == k) { break; } int temp = A[smallest]; A[smallest] = A[k]; A[k] = temp; k = smallest; } } public void heapify(int[] A) { for (int i = A.length / 2; i >= 0; i--) { siftdown(A, i); } }}}
Last Update 2016.10.16
0 0
- 130.Heapify-堆化(中等题)
- *[Lintcode] Heapify 堆化
- 数组建堆(heapify)
- 第六章堆排序之“保持堆的性质MAX-HEAPIFY”(递归版)
- 第六章堆排序之“保持堆的性质MAX-HEAPIFY”(迭代版,练习6.2-5)
- 4-5 基础堆排序和Heapify(两个版本的基于堆的排序算法)
- Heapify
- 挖掘算法中的数据结构(四):堆排序之 二叉堆(Heapify、原地堆排序优化)
- 堆排序之MAX-HEAPIFY注释
- 最大堆维护,MAX-HEAPIFY非递归伪代码
- 3.Digit Counts-统计数字(中等题)
- 15.Permutations-全排列(中等题)
- 17.Subsets-子集(中等题)
- 92.Backpack-背包问题(中等题)
- 129.Rehashing-重哈希(中等题)
- 152.Combinations-组合(中等题)
- 187.Gas Station-加油站(中等题)
- [中等] 堆优化的Dijkstra实现
- 数据可视化之 星图
- airport – 极少人知道的命令行无线工具
- 对《煎蛋增强版》开发过程级主要功能的理解
- 127.Topological Sorting-拓扑排序(中等题)
- echo打印相关
- 130.Heapify-堆化(中等题)
- 从eclipse中提交项目至github
- JDBC操作数据库知识点整理
- HDU-1007-Quoit Design
- JUC - ReentrantReadWriteLock 源码分析
- 检测移动设备横竖屏
- 递归-Hanoi塔问题
- Func和Action系统委托
- 基本算法-路灯