042 Trapping Rain Water 接雨水
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算下雨之后能接多少雨水。
例如,
输入 [0,1,0,2,1,0,1,3,2,1,2,1],返回 6。
详见:https://leetcode.com/problems/trapping-rain-water/description/
Java实现:
方法一:
先遍历一遍找到塔顶,然后分别从两边开始,往塔顶所在位置遍历,水位只会增高不会减小,且一直和最近遇到的最大高度持平,这样知道了实时水位,就可以边遍历边计算面积。
参考:https://www.cnblogs.com/felixfang/p/3713197.html
class Solution {
public int trap(int[] height) {
int n=height.length;
if(n<=2){
return 0;
}
int top=-1;
int topIndex=0;
for(int i=0;i<n;++i){
if(height[i]>top){
top=height[i];
topIndex=i;
}
}
int area=0;
int root=height[0];
for(int i=0;i<topIndex;++i){
if(root<height[i]){
root=height[i];
}else{
area+=(root-height[i]);
}
}
root=height[n-1];
for(int i=n-1;i>topIndex;--i){
if(root<height[i]){
root=height[i];
}else{
area+=(root-height[i]);
}
}
return area;
}
}
方法二:
left和right两个指针分别指向数组的首尾位置,从两边向中间扫描,在当前两指针确定的范围内,先比较两头找出较小值,如果较小值是left指向的值,则从左向右扫描,如果较小值是right指向的值,则从右向左扫描,若遇到的值比当较小值小,则将差值存入结果,如遇到的值大,则重新确定新的窗口范围,以此类推直至left和right指针重合。
class Solution {
public int trap(int[] height) {
int n=height.length;
if(n<2){
return 0;
}
int area=0;
int left=0;
int right=n-1;
while(left<right){
int min=height[left]<height[right]?height[left]:height[right];
if(height[left]==min){
++left;
while(left<right&&height[left]<min){
area+=min-height[left];
++left;
}
}else{
--right;
while(left<right&&height[right]<min){
area+=min-height[right];
--right;
}
}
}
return area;
}
}
参考:http://www.cnblogs.com/grandyang/p/4402392.html
042 Trapping Rain Water 接雨水的更多相关文章
- [LeetCode] Trapping Rain Water 收集雨水
Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...
- [LeetCode] 42. Trapping Rain Water 收集雨水
Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...
- [LintCode] Trapping Rain Water 收集雨水
Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...
- LeetCode 042 Trapping Rain Water
题目要求:Trapping Rain Water Given n non-negative integers representing an elevation map where the width ...
- 【LeetCode】042 Trapping Rain Water
题目: Given n non-negative integers representing an elevation map where the width of each bar is 1, co ...
- 【LeetCode】42. Trapping Rain Water 接雨水 (C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力求解 保存左右最大值 单调栈 日期 题目地址:ht ...
- 【LeetCode每天一题】Trapping Rain Water(获得雨水的容量)
Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...
- [leetcode][042] Trapping Rain Water (Java)
我在Github上新建了一个解答Leetcode问题的Project, 大家可以参考, 目前是Java 为主,里面有leetcode上的题目,解答,还有一些基本的单元测试,方便大家起步. 题目在这里: ...
- Java for LeetCode 042 Trapping Rain Water
Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...
随机推荐
- (转)RTSP协议详解
转自:https://www.cnblogs.com/lidabo/p/6553212.html RTSP简介 RTSP(Real Time Streaming Protocol)是由Real ...
- Linux 查看并删除.svn目录
1. find . -type d -name ".svn"|xargs rm -rf
- MongoDB 使用经验笔记
bin下的mongod就是MongoDB的服务端进程,mongo就是其客户端,其它的命令用于MongoDB的其它用途如MongoDB文件导出等 启动方式: 1.直接启动,指定各项参数: /usr/lo ...
- ACM学习历程—HDU1028 Ignatius and the Princess III(递推 || 母函数)
Description "Well, it seems the first problem is too easy. I will let you know how foolish you ...
- 洛谷 P2962 [USACO09NOV]灯Lights
题目描述 Bessie and the cows were playing games in the barn, but the power was reset and the lights were ...
- 制定一套适合自己团队的GITflow标准化工作流
Git作为分布式代码管理的“当红炸子鸡”,被越来越多团队使用.当团队多个人员在同一个Git仓库上进行代码开发,没有一套标准化流程,将会引起代码管理的混乱,上线流程的迷茫,影响工作效率.制定一套适合自己 ...
- 获取.net对象的属性集
int count = System. ComponentModel.TypeDescriptor .GetProperties( StudyInfo).Count ; ...
- ubuntu下mysql的安装与配置
1.安装,安装的过程中会提示你设置 MySql的"root"密码 sudo apt-get install mysql-server mysql-client 2.把 /etc/ ...
- [解决问题]SSH连不上Ubuntu虚拟机解决办法
1. 安装openssh-client Ubuntu默认缺省安装了openssh-client,apt-get安装即可 sudo apt-get install openssh-client 2. 安 ...
- glib 库 hash table 使用
glib库提供了 hashtable 的实现 1. 常用函数: 创建一个 GHashTable 函数: hash_func 是创建value的key值的函数,key_equal_func 是比较两个k ...