刷题-栈和队列(2)

一、题目

 

刷题-栈和队列(2)

 

二、题目理解

  1.用栈实现,所以既要满足找到最小值,同时元素位置没有变

    我们可以用两个栈进行实现,一个主栈存放元素,另一个副栈存放最小值,每当需要最小值的时候,我就top出副栈即可,需要当前位置的时候,top出主栈。

三、代码展示

 1 /**
 2  * initialize your data structure here.
 3  */
 4 var MinStack = function() {
 5     this.x_stack=[];
    //infinity是js里面一个属性:是一个数值类型,+infinity是正无穷大,-infinity是负无穷大 6 this.min_stack=[Infinity]; 7 }; 8 9 /** 10 * @param {number} x 11 * @return {void} 12 */ 13 MinStack.prototype.push = function(x) { 14 this.x_stack.push(x); 15 // 减一是长度和元素的位置序号是不一样的,比如1,2,长度为2,但是1元素的位置是0,所以,要跟前一项进行比较大小,所以长度减一才满足 16 // 此时x已经进入到主栈里面,现在是和副栈的栈顶比较大小,如果比副栈的栈顶小,进入副栈,否则不变 17 this.min_stack.push(Math.min(this.min_stack[this.min_stack.length-1],x)); 18 }; 19 20 /** 21 * @return {void} 22 */ 23 MinStack.prototype.pop = function() { 24 this.x_stack.pop(); 25 this.min_stack.pop(); 26 }; 27 28 /** 29 * @return {number} 30 */ 31 MinStack.prototype.top = function() { 32 // 这里减一也是同一原理 33 return this.x_stack[this.x_stack.length-1]; 34 }; 35 36 /** 37 * @return {number} 38 */ 39 MinStack.prototype.min = function() { 40 return this.min_stack[this.min_stack.length-1]; 41 }; 42 43 /** 44 * Your MinStack object will be instantiated and called as such: 45 * var obj = new MinStack() 46 * obj.push(x) 47 * obj.pop() 48 * var param_3 = obj.top() 49 * var param_4 = obj.min() 50 */

 

上一篇:计蒜客 T2021 飞扬的小鸟


下一篇:2022 年下学期期末考试游记