降水量问题 JavaScript版

题目描述:
给定n个柱面的高度,表示降雨某地n块区域的海拔高度。
计算降雨之后该地最大储水面积。如果低于地平线,也就是小于0,则一定积水。
降水量问题 JavaScript版_第1张图片
输入描述:
第一行输入整数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;
}

你可能感兴趣的:(算法)