Keshawn_lu's Blog

Leetcode 155. 最小栈

字数统计: 409阅读时长: 1 min
2020/05/12 Share

题目简介:

设计一个支持 pushpoptop 操作,并能在常数时间内检索到最小元素的栈。

  • push(x) —— 将元素 x 推入栈中。
  • pop() —— 删除栈顶的元素。
  • top() —— 获取栈顶元素。
  • getMin() —— 检索栈中的最小元素。

    示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
输入:
["MinStack","push","push","push","getMin","pop","top","getMin"]
[[],[-2],[0],[-3],[],[],[],[]]

输出:
[null,null,null,null,-3,null,0,-2]

解释:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.

提示:

  • poptopgetMin 操作总是在 非空栈 上调用。

思路:

使用stack结构,设置两个栈,一个存储正常数据的栈,一个存储栈中最小数据的辅助栈,push数据时,将辅助栈的栈顶元素和当前数据进行比较,将较小值push进辅助栈,这样就能保证辅助栈的栈顶元素永远是栈中的最小元素。正常栈pop出元素时,则将辅助栈的栈顶元素也pop出即可。其他操作较为简单,直接调用函数即可。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class MinStack {
public:
/** initialize your data structure here. */
stack<int> s;
stack<int> min_stack; //栈顶存储最小元素
MinStack() {
min_stack.push(INT_MAX);
}

void push(int x) {

s.push(x);
min_stack.push(min(x, min_stack.top())); //将最小值存入最小栈的栈顶
}

void pop() {

s.pop();
min_stack.pop();
}

int top() {

return s.top();
}

int getMin() {

return min_stack.top();
}
};

/**
* 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->getMin();
*/
CATALOG
  1. 1. 题目简介:
  2. 2. 思路:
  3. 3. 代码如下: