目录栈特点:先进后出(FILO)使用场景:十进制转二进制函数调用栈js中没有栈,但是可以用数组模拟42/242%2=021/221%2=110/210%2=05/25%2=12/22%2=01/21%2=1堆栈:[0,1,0,1,0,1]res:101010fn1(){fn2()}fn2(){fn3()}fn3(){}fn1()stack:[fn1,fn2,fn3]stack的时间复杂度:压入和弹出O(1),搜索O(n)155。最小栈(easy)设计一个栈,支持push、pop、top操作,可以在常数时间内取出最小的元素。实现MinStack类:MinStack()初始化堆栈对象。voidpush(intval)将元素val压入堆栈。voidpop()移除栈顶元素。inttop()获取栈顶元素。intgetMin()获取堆栈中的最小元素。示例1:输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]输出:[null,null,null,null,-3,null,0,-2]解释:MinStackminStack=newMinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.getMin();-->返回-3.minStack.pop();minStack.top();-->返回0.minStack.getMin();-->返回-2。提示:-231<=val<=231-1pop、top和getMin操作总是在非空栈上调用push、pop、top和getMin调用3*104次思路:定义两个栈stack和min_stack,栈为正常压入,而min_stack只会压入需要压入栈顶的较小的元素。getMin返回min_stack的栈顶元素,top返回栈顶元素。复杂度:所有操作的时间复杂度为O(1)js:varMinStack=function(){this.stack=[];this.min_stack=[Infinity];};//正常压栈,min_stack只会压栈MinStack.prototype.push=function(x){this.stack.push(x);this.min_stack.push(Math.min(this.min_stack[this.min_stack.length-1],x));};//栈正常出栈,min_stack正常出栈MinStack.prototype.pop=function(){this.堆栈弹出();this.min_stack.pop();};//返回栈顶元素MinStack.prototype.top=function(){returnthis.stack[this.stack.length-1];};//返回min_stack栈顶元素MinStack.prototype.getMin=function(){returnthis.min_stack[this.min_stack.length-1];};946。验证栈序列(中)给定pushed和popped两个序列,每个序列中的值不重复,只有当它们可能在初始空栈上执行时返回true如果序列push和pop操作的结果;否则,返回假。示例1:输入:pushed=[1,2,3,4,5],popped=[4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1),推(2)、推(3)、推(4)、弹出()->4、推(5)、弹出()->5、弹出()->3、弹出()->2、弹出()->1示例2:输入:pushed=[1,2,3,4,5],popped=[4,3,5,1,2]输出:false解释:1不能在2之前弹出。Tips:1<=pushed.length<=10000<=pushed[i]<=1000pushed的所有元素都是互不相同的。popped.length==pushed.lengthpopped是push过大的排列动画。点击查看思路:使用栈模拟在出栈和入栈的过程中,当popped中index指向的位置的元素与栈顶元素一致时,出栈和index++,最后判断栈是否为空。复杂度:时间复杂度O(n),在pushed元素被push和pop一次,空间复杂度为O(n),栈的大小为js:constvalidateStackSequences=(pushed,popped)=>{conststack=[];//利用栈来模拟出栈和入栈的过程letindex=0;constlen=pushed.length;for(leti=0;i
