代码随想录算法训练营第四十九天| 42. 接雨水 、84.柱状图中最大的矩形

25 阅读1分钟

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;
};