Heap — 20181120
363. Trapping Rain Water
public class Solution {
/**
* @param heights: a list of integers
* @return: a integer
*/
public int trapRainWater(int[] heights) {
// write your code here
if (heights == null || heights.length == 0) {
return 0;
}
int start = 0;
int end = heights.length - 1;
int maxLeft = Integer.MIN_VALUE;
int maxRight = Integer.MIN_VALUE;
int sum = 0;
while (start < end) {
maxLeft = heights[start] > maxLeft ? heights[start] : maxLeft;
maxRight = heights[end] > maxRight ? heights[end] : maxRight;
if (maxLeft < maxRight) {
sum += maxLeft - heights[start];
start++;
} else {
sum += maxRight - heights[end];
end--;
}
}
return sum;
}
}
364. Trapping Rain Water II
class Point {
int x;
int y;
int height;
public Point(int x, int y, int height) {
this.x = x;
this.y = y;
this.height = height;
}
}
public class Solution {
/**
* @param heights: a matrix of integers
* @return: an integer
*/
int[] dx = {0, 1, 0, -1};
int[] dy = {1, 0, -1, 0};
public int trapRainWater(int[][] heights) {
// write your code here
if (heights == null || heights.length == 0 || heights[0].length == 0) {
return 0;
}
int r = heights.length;
int c = heights[0].length;
boolean[][] visited = new boolean[r][c];
Comparator<Point> minComparator = new Comparator<Point>() {
@Override
public int compare(Point o1, Point o2) {
return o1.height - o2.height;
}
};
PriorityQueue<Point> minHeap = new PriorityQueue<>(minComparator);
for (int i = 0; i < r; i++) {
minHeap.add(new Point(i, 0, heights[i][0]));
visited[i][0] = true;
minHeap.add(new Point(i, c - 1, heights[i][c - 1]));
visited[i][c - 1] = true;
}
for (int j = 0; j < c; j++) {
minHeap.add(new Point(0, j, heights[0][j]));
visited[0][j] = true;
minHeap.add(new Point(r - 1, j, heights[r - 1][j]));
visited[r - 1][j] = true;
}
int sum = 0;
while (!minHeap.isEmpty()) {
Point point = minHeap.poll();
for (int i = 0; i < 4; i++) {
int nx = point.x + dx[i];
int ny = point.y + dy[i];
if (!isValid(nx, ny, heights, visited)) {
continue;
}
visited[nx][ny] = true;
minHeap.add(new Point(nx, ny, Math.max(heights[nx][ny], point.height)));
sum += Math.max(heights[nx][ny], point.height) - heights[nx][ny];
}
}
return sum;
}
public boolean isValid(int x, int y, int[][] heights, boolean[][] visited) {
if (x < 0 || x > heights.length - 1 || y < 0 || y > heights[0].length - 1) {
return false;
}
if (visited[x][y]) {
return false;
}
return true;
}
}
360. Sliding Window Median 具体思路见 81. Find Median from Data Stream
public class Solution {
/**
* @param nums: A list of integers
* @param k: An integer
* @return: The median of the element inside the window at each moving
*/
private PriorityQueue<Integer> minHeap;
private PriorityQueue<Integer> maxHeap;
private int maxSize = 0;
private int minSize = 0;
public List<Integer> medianSlidingWindow(int[] nums, int k) {
// write your code here
if (nums == null || nums.length < k || k <= 0) {
return new ArrayList<>();
}
minHeap = new PriorityQueue<>();
maxHeap = new PriorityQueue<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
}
});
List<Integer> res = new ArrayList<>();
for (int i = 0; i < k; i++) {
addNumber(nums[i]);
}
res.add(getMedian());
for (int j = k; j < nums.length; j++) {
slideByWindow(nums[j], nums[j - k]);
res.add(getMedian());
}
return res;
}
public void addNumber(int num) {
maxHeap.add(num);
maxSize++;
if (maxSize - minSize <= 1) {
if (minHeap.isEmpty()) {
return;
}
if (maxHeap.peek() > minHeap.peek()) {
int maxTemp = maxHeap.poll();
int minTemp = minHeap.poll();
minHeap.add(maxTemp);
maxHeap.add(minTemp);
}
return;
}
minHeap.add(maxHeap.poll());
minSize++;
maxSize--;
}
public int getMedian() {
return maxHeap.peek();
}
public void slideByWindow(int toAdd, int toRemove) {
if (toRemove <= getMedian()) {
maxHeap.remove(toRemove);
maxSize--;
} else {
minHeap.remove(toRemove);
minSize--;
}
addNumber(toAdd);
}
}
Heap — 20181120的更多相关文章
- java head space/ java.lang.OutOfMemoryError: Java heap space内存溢出
上一篇JMX/JConsole调试本地还可以在centos6.5 服务器上进行监控有个问题端口只开放22那么设置的9998端口 你怎么都连不上怎么监控?(如果大神知道还望指点,个人见解) 线上项目出现 ...
- Java 堆内存与栈内存异同(Java Heap Memory vs Stack Memory Difference)
--reference Java Heap Memory vs Stack Memory Difference 在数据结构中,堆和栈可以说是两种最基础的数据结构,而Java中的栈内存空间和堆内存空间有 ...
- [数据结构]——堆(Heap)、堆排序和TopK
堆(heap),是一种特殊的数据结构.之所以特殊,因为堆的形象化是一个棵完全二叉树,并且满足任意节点始终不大于(或者不小于)左右子节点(有别于二叉搜索树Binary Search Tree).其中,前 ...
- Windbg Extension NetExt 使用指南 【3】 ---- 挖掘你想要的数据 Managed Heap
摘要 : NetExt中有两个比较常用的命令可以用来分析heap上面的对象. 一个是!wheap, 另外一个是!windex. !wheap 这个命令可以用于打印出heap structure信息. ...
- JAVA Shallow heap & Retained heap
最近在研究内存泄漏的问题,在使用MAT工具中发现了Shallow heap & Retained heap,不懂. 然后在网上找了一些资料. Shallow Size 对象自身占用的内存大小, ...
- 笔记:程序内存管理 .bss .data .rodata .text stack heap
1.未初始化的全局变量(.bss段) bss段用来存放 没有被初始化 和 已经被初始化为0 的全局变量.如下例代码: #include<stdio.h> int bss_array[102 ...
- STL heap usage
简介 heap有查找时间复杂度O(1),查找.插入.删除时间复杂度为O(logN)的特性,STL中heap相关的操作如下: make_heap() push_heap() pop_heap() sor ...
- Nodemanager Out of heap memory[fix bug全过程]
问题: 自己写了一个yarn上的application,发现nodemanager过段时间,会out of memory退出,把nodemanager的heap memory从1G增大到2G也是无法避 ...
- Git使用出错:Couldn‘t reserve space for cygwin‘s heap, Win32
今天使用Git在命令行下更新代码遇到了问题,起初觉得是自己安装某软件导致冲突,从网上搜索了一下找到类似问题,成功解决问题. 错误信息如下: E:\storm-sql>git pull origi ...
随机推荐
- MCMC 破译密码 http://mlwhiz.com/blog/2015/08/21/MCMC_Algorithms_Cryptography/
# AIM: To Decrypt a text using MCMC approach. i.e. find decryption key which we will call cipher fro ...
- 2.Books
Books示例说明了Qt中SQL类如何被Model/View框架使用,使用数据库中存储的信息,创建丰富的用户界面. 首先介绍使用SQL我们需要了解的类: 1.QSqlDatabase: QSqlDat ...
- .NET读取服务器或本地文件
//把本地文件信息读入数据流中 FileStream stream = new FileStream(path, FileMode.Open, FileAcces ...
- 编写高质量代码改善C#程序的157个建议——建议54:为无用字段标注不可序列化
建议54:为无用字段标注不可序列化 序列化是指这样一种技术:把对象转变成流.相反过程,我们称为反序列化.在很多场合都需要用到这项技术. 把对象保存到本地,在下次运行程序的时候,恢复这个对象. 把对象传 ...
- ORACLE_ERP帐务分录
ORACLE MRPII各模块会计分录 第一章 采购模块 一.资产采购(科目来源:库存组织) 1.物料接收 借 材料采购 接收数量*采购单价 贷 应计暂估 接收数量*采购单价 ...
- 「BZOJ 2809」「APIO 2012」Dispatching「启发式合并」
题意 给定一个\(1\)为根的树,每个点有\(c,w\)两个属性,你需要从某个点\(u\)子树里选择\(k\)个点,满足选出来的点\(\sum_{i=1}^k w(i)\leq m\),最大化\(k\ ...
- linux系统root用户登录提示“鉴定故障”的解决办法
同事第一次创建虚拟机,遇到此问题,此前我未曾遇到,搜索到的解决办法记录在此,以防之后忘记. 一.重启系统解决(搜索到的该解决办法较多):https://www.cnblogs.com/lippor/p ...
- 八大排序算法的python实现(五)堆排序
代码 #coding:utf-8 #author:徐卜灵 # 堆排序适用于记录数很多的情况 #与快速排序,归并排序 时间复杂一样都是n*log(n) ######################### ...
- SHELL编程之条件测试
条件测试 (一)概念:对特定的条件进行判断,以决定如何执行操作,当条件成立时,测试语句的返回值为0,否则为其他数值,意思就是如果 echo $? 的值是0,那么条件成立.条件测试的分类:文件测试.整数 ...
- webpack(二)解析es6并打包
一.前言 ECMAScript 6(ES6)的发展速度非常之快,但现代浏览器对ES6新特性支持度不高,所以要想在浏览器中直接使用ES6的新特性就得借助别的工具来实现.Babel是一个广泛使用的转码器, ...