leetcode Day43 剑指专项 36-40

123 阅读1分钟

剑指 Offer II 036. 后缀表达式

var evalRPN = function(tokens) {
    let stack=[]
    let methods=['+','-','*','/']
    for(let i of tokens){
        if(!methods.includes(i)){
            stack.push(i*1)
        }else{
            n1=stack.pop()
            n2=stack.pop()
            if(i==='+'){
                stack.push(n1+n2)
            }else if(i==='-'){
                stack.push(n2-n1)
            }else if(i==='*'){
                stack.push(n1*n2)
            }else{
                stack.push(n2/n1>0?Math.floor(n2/n1):Math.ceil(n2/n1))
            }
        }
    }
    return stack.pop()
};

剑指 Offer II 037. 小行星碰撞

var asteroidCollision = function(asteroids) {
    let stack=[]
    for(let i of asteroids){
        while(stack.length && stack[stack.length-1]>0 && -i>stack[stack.length-1]){
            stack.pop()
        }
        //如果最后一个元素向左,怎么都不会撞,如果此时的i是右,怎么都不会撞
        if(!stack.length || stack[stack.length-1]<0 || i>0){
            stack.push(i)
        }else if(stack.length && stack[stack.length-1]>0 && i<0 && -i===stack[stack.length-1]){
            stack.pop()
        }
    }
    return stack
};

剑指 Offer II 038. 每日温度

var dailyTemperatures = function(temperatures) {
    let res=new Array(temperatures.length).fill(0)
    for(let i=0;i<temperatures.length;i++){
        for(let j=i+1;j<temperatures.length;j++){
            if(temperatures[j]>temperatures[i]){
                res[i]=j-i
                break
            }
        }
    }
    return res
};
var dailyTemperatures = function(temperatures) {
    let stack=[]
    let res=new Array(temperatures.length).fill(0)
    for(let i=0;i<temperatures.length;i++){
        while(stack.length && temperatures[stack[stack.length-1]]<temperatures[i]){
            let j=stack.pop()
            res[j]=i-j
        }
        stack.push(i)
    }
    return res
};

剑指 Offer II 039. 直方图最大矩形面积

var largestRectangleArea = function(heights) {
    let res=0
    let stack=[-1]
    for(let i=0;i<heights.length;i++){
        while(heights[stack[stack.length-1]]>heights[i]){
            area=heights[stack.pop()]*(i-stack[stack.length-1]-1)
            res=Math.max(res,area)
        }
        stack.push(i)
    }
    while(heights[stack[stack.length-1]]>0){
        area=heights[stack.pop()]*(heights.length-stack[stack.length-1]-1)
        res=Math.max(res,area)
    }
    return res
};