代码随想录35期Day59-JavaScript(day58休息)

Day59题目

LeetCode503下一个更大元素

核心思想:和之前的下一个更高温度差不多,使用单调栈,只不过这个需要你循环查找,可以通过遍历两次数组实现

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var nextGreaterElements = function(nums) {
    var len = nums.length
    var res = new Array(len).fill(-1)
    var stack = []
    // 这里遍历2*len次
    for(let i = 0 ; i < 2* len ;  i ++){
    	// 下面做判断都需要给i对len取余
        while(stack.length > 0 && nums[stack[stack.length-1]] < nums[i%len]){
            let index = stack.pop()
            res[index] = nums[i%len]
        }    
        stack.push(i%len)
    }
    return res;
};

LeetCode42接雨水

核心思想:高频题目,使用单调栈能够得到当前元素的后边第一个比他大的元素,和左边第一个比他大的元素(就是栈中的下一个),然后计算即可.使用单调栈是横向计算面积的

/**
 * @param {number[]} height
 * @return {number}
 */
var trap = function(height) {
    var stack = []
    var res = 0;
    for(let i =  0  ; i  < height.length ; i ++){
        while(stack.length  > 0 &&  height[stack[stack.length-1]]  < height[i]){
            let index = stack.pop();
            if(stack.length === 0 ) break;
            let h = Math.min(height[i],height[stack[stack.length-1]] ) - height[index];
            let w = i - stack[stack.length-1] - 1;
            let square = h*w;
            res = res + square;
        }
        stack.push(i);
    }
    return res;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值