Implement heap using Java
public class HeapImpl {
private int CAPACITY = 10;
private int size = 0;
private int[] data;
public HeapImpl() {
data = new int[CAPACITY];
}
//some helper methods
private int getLeftChildIndex(int index) {
return index * 2 + 1;
}
private int getRightChildIndex(int index) {
return index * 2 + 2;
}
private int getParentIndex(int index) {
return (index - 1) / 2;
}
private boolean hasLeftChild(int index) {
return getLeftChildIndex(index) < size;
}
private boolean hasRightChild(int index) {
return getRightChildIndex(index) < size;
}
private boolean hasParent(int index) {
return getParentIndex(index) >= 0;
}
private void ensureCapacity() {
if (size == CAPACITY) {
data = Arrays.copyOf(data, CAPACITY * 2);
CAPACITY = CAPACITY * 2;
}
}
private void swap(int index1, int index2) {
int temp = data[index1];
data[index1] = data[index2];
data[index2] = temp;
}
public int poll() {
if (size == 0) {
throw new IllegalStateException();
}
int item = data[0];
data[0] = data[size - 1];
heapifyDown();
return item;
}
private void heapifyDown() {
int index = 0;
while (hasLeftChild(index)) {
int smallest = getLeftChildIndex(index);
if (hasRightChild(index) && data[getRightChildIndex(index)] < data[smallest]) {
smallest = getRightChildIndex(index);
}
if (data[index] < data[smallest]) {
break;
} else {
swap(smallest, index);
index = smallest;
}
}
}
public void add(int item) {
ensureCapacity();
data[size++] = item;
heapifyUp();
}
private void heapifyUp() {
int index = size - 1;
while (hasParent(index) && data[getParentIndex(index)] > data[index]) {
swap(index, getParentIndex(index));
index = getParentIndex(index);
}
}
// public static void main(String [] args){
// HeapImpl heap = new HeapImpl();
// heap.add(2);
// heap.add(4);
// heap.add(5);
// heap.add(0);
// heap.add(9);
// heap.add(100);
// heap.add(15);
// System.out.println(heap.poll());
// System.out.println(heap.poll());
// System.out.println(heap.poll());
// System.out.println(heap.poll());
//
// }
}
Implement heap using Java的更多相关文章
- Google 面试题:Java实现用最大堆和最小堆查找中位数 Find median with min heap and max heap in Java
Google面试题 股市上一个股票的价格从开市开始是不停的变化的,需要开发一个系统,给定一个股票,它能实时显示从开市到当前时间的这个股票的价格的中位数(中值). SOLUTION 1: 1.维持两个h ...
- Stack & Heap in Java
Stack and Heap 都是Java用来在RAM中存放数据的地方.Java自动管理堆和栈,用户不能直接的设置堆或栈. Stack:存在于栈中的数据,其大小与生存周期是确定的,栈中的数据可以共享 ...
- javadataAbout stack and heap in JAVA(2)
改章节个人在上海喝咖啡的时候突然想到的...近期就有想写几篇关于javadata的笔记,所以回家到之后就奋笔疾书的写出来发表了 The stack is much faster than the he ...
- Exception in thread "main" java.lang.OutOfMemoryError: Java heap space(Java堆空间内存溢出)解决方法
http://hi.baidu.com/619195553dream/blog/item/be9f12adc1b5a3e71f17a2e9.html问题描述Exception in thread &q ...
- Implement strStr() leetcode java
题目: Implement strStr(). Returns a pointer to the first occurrence of needle in haystack, or null if ...
- 认识Java Core和Heap Dump
什么是Java Core和Heap Dump Java程序运行时,有时会产生Java Core及Heap Dump文件,它一般发生于Java程序遇到致命问题的情况下. 发生致命问题后,Java进程有时 ...
- Java heap dump触发和分析(转)
为了分析java应用的内存泄漏,使用thread dump往往解决不了问题.使用jstat[eg:jstat-gcutil pid 1000 5]工具查看运行的java应用的heap size,per ...
- 关于java.lang.OutOfMemoryError: Java heap space的错误分析
今天无意间遇到这个错误:java.lang.OutOfMemoryError: Java heap space 问题出现原因:使用a标签实现快速下载[当然已经实现了,但想了想还是要归纳解决这类问题] ...
- java.lang.OutOfMemoryError: Java heap space错误及处理办法(收集整理、转)
下面是从网上找到的关于堆空间溢出的错误解决的方法: java.lang.OutOfMemoryError: Java heap space ============================== ...
随机推荐
- sql server导出数据结构
http://jingyan.baidu.com/article/eae07827ad76ba1fed548573.html
- react,react native,webpack,ES6,node.js----------今天上午学了一下node.js
http://www.yiibai.com/nodejs/node_install.html---node.js具体入门资料在此 Node JS事件循环 Node JS是单线程应用程序,但它通过事件和 ...
- 如何编写高质量JavaScript代码
书写可维护的代码(Writing Maintainable Code ) 软件bug的修复是昂贵的,并且随着时间的推移,这些bug的成本也会增加,尤其当这些bug潜伏并慢慢出现在已经发布的软件中时.当 ...
- 2. Java面向对象之泛型-构造方法中使用
package generic; class Construtgeneric<T> { private T value; public Construtgeneric(T value) { ...
- selenium webdriver——设置元素等待
如今大多数Web应用程序使用ajax技术,当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给定位元素的定位增加了困难, 如果因为在加载某个元素时延迟而造成ElementNotVisibl ...
- netData.go 阅读源码
) // 定义数据传输结构 type NetData struct { // 消息体 Body interface{} // 操作代号 Operation string ...
- 基于.NET CORE微服务框架 -谈谈surging 的messagepack、protobuffer、json.net 序列化
1.前言 surging内部使用的是高性能RPC远程服务调用,如果用json.net序列化肯定性能上达不到最优,所以后面扩展了protobuf,messagepack序列化组件,以支持RPC二进制传输 ...
- im2col:将卷积运算转为矩阵相乘
目录 im2col实现 优缺点分析 参考 博客:blog.shinelee.me | 博客园 | CSDN im2col实现 如何将卷积运算转为矩阵相乘?直接看下面这张图,以下图片来自论文High P ...
- Logistic回归二分类Winner or Losser----台大李宏毅机器学习作业二(HW2)
一.作业说明 给定训练集spam_train.csv,要求根据每个ID各种属性值来判断该ID对应角色是Winner还是Losser(0.1分类). 训练集介绍: (1)CSV文件,大小为4000行X5 ...
- 读书笔记:深入理解java虚拟机(二)创建对象的时候需要访问哪几块内存
@TOC 对象在内存中如何储存 对象访问在java语言中无处不在,是最普通的程序行为,但即使是最简单的访问,也会涉及到java栈,java堆,方法去三个最重要的内存区域的关联关系,比如下面这段代码: ...