代码随想录day59【单调栈】下一个更大元素 II 接雨水

下一个更大元素 II

下一个更大元素 II
思路一:扩展数组。
思路二:通过取模操作循环遍历

var nextGreaterElements = function(nums) {
    let stack = [];
    let res = new Array(nums.length).fill(-1);
    stack.push(0);

    for (let i = 1; i < nums.length*2; i++) { //注意需要乘以2
        const top = stack[stack.length - 1];
        const key = i % nums.length
        if (nums[top] >= nums[key]) {
        //记录结果
        stack.push(key);
        } else {
            while (
                stack.length >= 1 &&
                nums[stack[stack.length - 1]] < nums[key]
            ) {
                let top = stack.pop();
                res[top] = nums[key];//这里再变
            }
            stack.push(key);
        }
    }
    return res;
};

接雨水

力扣题目链接
利用单调栈特性解决。(递增栈)
横向分块累加求结果

var trap = function(height) {
     let stack = [];
    stack.push(0);
    let res=0

    for (let i = 1; i < height.length; i++) {
        const top = stack[stack.length - 1];
        if (height[top] >= height[i]) {
            stack.push(i);
        } else {
        while (
            stack.length >= 1 &&
            height[stack[stack.length - 1]] < height[i]
        ) {
            let mid = stack.pop(); 
            if(stack.length >= 1){
                let h=Math.min(height[i],height[stack[stack.length-1]])-height[mid]
                let width=i -stack[stack.length-1]-1
                res += h*width
            }
        }
        stack.push(i);
        }
    }
    return res;
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容