42. 接雨水
解题思路
代码实现
var trap = function(height) {
var stack= new Array();
stack.push(0);
var result =0;
for(let i=1;i<height.length;i++){
var top = stack[stack.length-1];
if(height[i] < height[top]){
stack.push(i);
}else if(height[i] == height[top]){
stack.pop();
stack.push(i);
}else{
while(stack.length && height[i] > height[top]){
stack.pop();
if(stack.length){
var left = stack[stack.length-1]
var h = Math.min(height[left],height[i]) -height[top];
var w = i-left -1;
result += h*w;
top = stack[stack.length-1];
}
}
stack.push(i);
}
}
return result;
};
84.柱状图中最大的矩形
解题思路
代码实现
var largestRectangleArea = function(heights) {
var result =0;
//收尾加0
heights.push(0);
heights.unshift(0);
var stack=new Array();
stack.push(0);
for(let i=1;i<heights.length;i++){
var top = stack[stack.length-1];
if(heights[i] > heights[top]){
stack.push(i);
}else if(heights[i] == heights[top]){
stack.pop();
stack.push(i);
}else{
while(stack.length && heights[i] < heights[top]){
stack.pop();
if(stack.length){
var left = stack[stack.length-1];
var h = heights[top];
var w = i -left -1;
result = Math.max(h*w,result);
top = stack[stack.length-1];
}
}
stack.push(i)
}
}
return result;
};