YMLiang

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

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

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin();   --> 返回 -3.
minStack.pop();
minStack.top();      --> 返回 0.
minStack.getMin();   --> 返回 -2.
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
41
42
43
44
45
46
47
48
49
class MinStack {
//声明栈
private Stack<Integer> stack;
//声明初始最小值为Integer.MAX_VALUE保证第一个push的值必定毕它小则可以设定第一个push的值为最小值
private int min = Integer.MAX_VALUE;
/** initialize your data structure here. */

public MinStack() {
//新建栈
stack = new Stack<>();
}

public void push(int x) {
//判断如果push的值小于等于min值则将之前的最小值入栈,min设置为当前最小值,之后将当前最小值入栈
// >= 中的 等于是为了避免出现相同值的情况 比如 0,1,0
if(min>=x){
stack.push(min);
min = x;
}
stack.push(x);
}

public void pop() {
//判断pop的值是否和当前最小值相等,如果相等则将上一次push的值设为最小值(因为pop后栈顶元素为上一次入栈的最小值),整体思路就是每次遇到最小值时将上一次的最小值push,之后push当前最小值,pop的时候也是同样,如果pop的值等于最小值则将最小值设置为上一次push入的值,注意pop的时候,只要执行了pop()方法,栈顶元素就出栈了,则当前最小值出栈,此时栈顶元素为上一次push的最小值,所以可以直接设置为最小值(即 min = stack.pop())
if(stack.pop() == min){
min = stack.pop();
}
}

public int top() {
//打印栈顶元素
return stack.peek();
}

public int getMin() {
//直接返回设定的最小值
return min;
}
}

/**
* 忽略这段
* 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();
*/

 评论


博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议

本站使用 Material X 作为主题 , 总访问量为 次 。
Copyright 2018-2019 YMLiang'BLOG   |   京ICP备 - 19039949  |  载入天数...载入时分秒...