js 包含min函数的栈_lcof/面试题30. 包含min函数的栈/README.md · pinefire/leetcode-3 - Gitee.com...

# [面试题30. 包含min函数的栈](https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/)

## 题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。

**示例:**

```

MinStack minStack = new MinStack();

minStack.push(-2);

minStack.push(0);

minStack.push(-3);

minStack.min(); --> 返回 -3.

minStack.pop();

minStack.top(); --> 返回 0.

minStack.min(); --> 返回 -2.

```

**提示:**

- 各函数的调用总次数不超过 20000 次

## 解法

### **Python3**

```python

class MinStack:

def __init__(self):

"""

initialize your data structure here.

"""

self._s1 = []

self._s2 = []

def push(self, x: int) -> None:

self._s1.append(x)

self._s2.append(x if len(self._s2) == 0 or self._s2[-1] > x else self._s2[-1])

def pop(self) -> None:

self._s1.pop()

self._s2.pop()

def top(self) -> int:

return self._s1[-1]

def min(self) -> int:

return self._s2[-1]

# Your MinStack object will be instantiated and called as such:

# obj = MinStack()

# obj.push(x)

# obj.pop()

# param_3 = obj.top()

# param_4 = obj.min()

```

### **Java**

```java

class MinStack {

private Stack s1;

private Stack s2;

/** initialize your data structure here. */

public MinStack() {

s1 = new Stack<>();

s2 = new Stack<>();

}

public void push(int x) {

s1.push(x);

s2.push((s2.empty() || s2.peek() > x) ? x : s2.peek());

}

public void pop() {

s1.pop();

s2.pop();

}

public int top() {

return s1.peek();

}

public int min() {

return s2.peek();

}

}

/**

* Your MinStack object will be instantiated and called as such:

* MinStack obj = new MinStack();

* obj.push(x);

* obj.pop();

* int param_3 = obj.top();

* int param_4 = obj.min();

*/

```

### **JavaScript**

```js

/**

* initialize your data structure here.

*/

var MinStack = function() {

this.stack = []

this.minStack = []

};

/**

* @param {number} x

* @return {void}

*/

MinStack.prototype.push = function(x) {

this.stack.unshift(x)

if(!this.minStack.length || this.minStack[0] >= x) {

this.minStack.unshift(x)

}

};

/**

* @return {void}

*/

MinStack.prototype.pop = function() {

if(this.stack.shift() === this.minStack[0]) {

this.minStack.shift()

}

};

/**

* @return {number}

*/

MinStack.prototype.top = function() {

return this.stack[0]

};

/**

* @return {number}

*/

MinStack.prototype.min = function() {

return this.minStack[0]

};

/**

* Your MinStack object will be instantiated and called as such:

* var obj = new MinStack()

* obj.push(x)

* obj.pop()

* var param_3 = obj.top()

* var param_4 = obj.min()

*/

```

### **...**

```

```

一键复制

编辑

Web IDE

原始数据

按行查看

历史

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值