LintCode 12.带最小值操作的栈
描述:
实现一个栈, 支持以下操作:
-
push(val)
将 val 压入栈 -
pop()
将栈顶元素弹出, 并返回这个弹出的元素 -
min()
返回栈中元素的最小值
要求 O(1) 开销。
样例:
输入:
push(1)
min()
push(2)
min()
push(3)
min()
输出:
1
1
1
注意事项
保证栈中没有数字时不会调用 min()
代码:
public class MinStack {
Stack<Integer> mainStack;
Stack<Integer> helpStack;
public MinStack() {
// do intialization if necessary
mainStack=new Stack<Integer>();
helpStack=new Stack<Integer>();
}
/*
* @param number: An integer
* @return: nothing
*/
public void push(int number) {
// write your code here
mainStack.push(number);
int top;
if(helpStack.empty()){
top=number;
helpStack.push(number);
}
else{//不为空
top=helpStack.peek();
if(top<number){
helpStack.push(top);
}else{
helpStack.push(number);
}
}
}
/*
* @return: An integer
*/
public int pop() {
// write your code here
if(!mainStack.empty()){
int data=mainStack.peek();
mainStack.pop();
helpStack.pop();
return data;
}
else return 0;
}
/*
* @return: An integer
*/
public int min() {
// write your code here
if(helpStack.empty()||mainStack.empty()){
return 0;
}
else{
return helpStack.peek();
}
}
}
补充说明:
Java Stack类
栈是Vector的一个子类,它实现了一个标准的后进先出的栈。
如何新建一个栈:
Stack<Integer> mainStack=new Stack<Integer>();
Stack<Integer> mainStack;mainStack=new Stack<Integer>();