刷题-栈和队列(2)

2022/1/29 23:10:56

本文主要是介绍刷题-栈和队列(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  */

 



这篇关于刷题-栈和队列(2)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程