降水量问题 JavaScript版
作者:互联网
题目描述:
给定n个柱面的高度,表示降雨某地n块区域的海拔高度。
计算降雨之后该地最大储水面积。如果低于地平线,也就是小于0,则一定积水。
输入描述:
第一行输入整数n.(1<=n<=10000)
第二行输入n个高度整数h。(-10000<=h<=10000)
输出描述:
积水面积。
本题思路是,需要找出墙的左边和右边,当出现凹形,则会积水,所以一定要找到墙的左边和右边,如何找到墙的右边呢?
根据积水坑的形状,一定是凹型,所以墙的左边一定是非递增,右边一定是非递减。
所以需要一个栈来存储左边,然后遇到右边的墙后,开始出栈,出栈后计算宽度和高度,得出面积。
由于需要宽度计算,所以入栈的是高度数组下标。
function trap(height){
var cur = 0;
var n = height.length;
var stack=[];
stack.push(cur);
var result=0;
while(cur<n){
while(height[cur]>height[stack[stack.length-1]]&&stack.length!=0){
var top=stack.pop();
if(stack.length==0){
break;
}
var distance = cur - top;
var tempheight = Math.min(height[cur],height[stack[stack.length-1]]) - height[top];
result+=distance*tempheight;
}
stack.push(cur);
cur++;
}
return result;
}
标签:右边,cur,JavaScript,height,问题,length,降水量,var,stack 来源: https://blog.csdn.net/Damp_XUN/article/details/100624772