Trapping Rain Water
来源:互联网 发布:python获取股票数据 编辑:程序博客网 时间:2024/05/16 12:30
Problem:
Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.
For example,
Given [0,1,0,2,1,0,1,3,2,1,2,1]
, return 6
.
Solution1是自己首先想到的一个版本,遇到下降的块压栈,遇到上升的块出栈,计算矩形面积。时间复杂度为O(n),空间复杂度为O(n)。
Solution2参考了别人的解决方法。想法就是先计算总面积,再减去实块所占的面积。时间复杂度O(n),空间复杂度O(1)。
Solution1:
public class Solution {
public int trap(int[] A) {
if(A==null||A.length==0)
return 0;
Stack<Integer> st = new Stack<>();
int water = 0;
int pre = 0;
for(int i=0;i<A.length;i++)
{
if(!st.empty()&&(A[i]>A[st.peek()]||i>st.peek()+1))
{
int j=st.peek();
while(!st.empty()&&A[i]>=A[st.peek()])
{
j = st.pop();
water += (i-j-1)*(A[j]-pre);
pre = A[j];
}
if(!st.empty())
{
water += (i-st.peek()-1)*(A[i]-pre);
pre = A[i];
}
}
else
pre = 0;
st.push(i);
}
return water;
}
if(A==null||A.length==0)
return 0;
Stack<Integer> st = new Stack<>();
int water = 0;
int pre = 0;
for(int i=0;i<A.length;i++)
{
if(!st.empty()&&(A[i]>A[st.peek()]||i>st.peek()+1))
{
int j=st.peek();
while(!st.empty()&&A[i]>=A[st.peek()])
{
j = st.pop();
water += (i-j-1)*(A[j]-pre);
pre = A[j];
}
if(!st.empty())
{
water += (i-st.peek()-1)*(A[i]-pre);
pre = A[i];
}
}
else
pre = 0;
st.push(i);
}
return water;
}
}
Solution2:
public class Solution {
public int trap(int[] A){
if(A==null||A.length<=1)
return 0;
int blocks = 0,all = 0,b = 0,e = A.length-1,height = 0;
while(b<e)
{
while(b<e&&A[b]<=height)blocks += A[b++];
while(b<e&&A[e]<=height)blocks += A[e--];
all += (Math.min(A[b], A[e])-height)*(e-b+1);
height = Math.min(A[b], A[e]);
}
return all - blocks - A[b];
}
}
public int trap(int[] A){
if(A==null||A.length<=1)
return 0;
int blocks = 0,all = 0,b = 0,e = A.length-1,height = 0;
while(b<e)
{
while(b<e&&A[b]<=height)blocks += A[b++];
while(b<e&&A[e]<=height)blocks += A[e--];
all += (Math.min(A[b], A[e])-height)*(e-b+1);
height = Math.min(A[b], A[e]);
}
return all - blocks - A[b];
}
}
0 0
- LeetCode: Trapping Rain Water
- LeetCode : Trapping Rain Water
- Trapping Rain Water
- [LeetCode] Trapping Rain Water
- [Leetcode] Trapping Rain Water
- [Leetcode] Trapping Rain Water
- Trapping Rain Water
- Trapping Rain Water
- [LeetCode]Trapping Rain Water
- Trapping Rain Water
- Trapping Rain Water
- LeetCode-Trapping Rain Water
- Trapping Rain Water
- [leetcode] Trapping Rain Water
- Trapping Rain Water
- [LeetCode] Trapping rain water
- Leetcode: Trapping Rain Water
- 38 - Trapping Rain Water
- Libpcap库主要函数
- leetcode 二分查找 Search for a Range
- python随机数生成
- 取消Eclipse的自动代码格式化
- linux常用命令之tail
- Trapping Rain Water
- cookie和session的区别
- 转一些别人的工作感悟和总结
- 一致性hash算法 - consistent hashing
- SetDlgItemText不能立即显示文本,而是等窗口更新才输出
- jQuery插件
- 静态和动态链接
- android 蓝牙 介绍转载
- jquery动态加载js/css文件方法