力扣刷题:栈

33 阅读2分钟

JavaScript(JS)中的栈是一种数据结构,它遵循后进先出(LIFO)的原则。栈可以理解为一个垂直堆叠的数据结构,只允许在栈顶进行操作。
在JavaScript中,栈通常用于函数调用、变量存储和表达式求值等场景。当一个函数被调用时,它会被放入栈顶,当函数执行完毕后,它会从栈顶弹出。这种机制使得函数调用可以按照顺序进行,同时也可以避免内存泄漏。
在JS中,可以使用数组来模拟栈的行为,通过push()方法将元素添加到栈顶,通过pop()方法将元素从栈顶弹出。这样就可以实现栈的基本操作,如入栈、出栈和获取栈顶元素等。

155、最小栈

在这个题,我可能保持了一贯的思路简单,在栈内寻找最小数时首先想到的是遍历查询,虽然潜意识里也觉得在这儿进行遍历有点重,不是最优解。然后查看了别人的解题思路,学习到了一个新的方法

this.minArray.push(Math.min(this.minArray[this.minArray.length - 1], val))

运行图.png

394、字符串解码

一开始这个题犯了一个常见的毛病直接看输入输出--按输入: s = "3[a]2[bc]" ;输出: "aaabcbc",只考虑了一层[],傻掉了🥹

var decodeString = function (s) {
  let Original = s.replace(/\[/g, "&").replace(/\]/g, "-").split("-");
  let result = Original.reduce((pre, curr) => {
    if (curr) {
      let temp = curr.split("&");
      let tempString = temp[1].repeat(Number(temp[0]));
      return pre + tempString;
    } else {
      return pre;
    }
  }, "");

  return result;
};

对于“3[a2[c]]”以及"2[abc]3[cd]ef"完全没思考(即深层括号+字符串只重复一次)的场景,提交的时候有一个测试案例是“100[leetcord]”这类的数字是多位的情况处理

739每日温度

单调栈 自己写的时间超时,所以参考的答案,学到了看看以后业务中能不能用上

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