剑指 Offer 30. 包含min函数的栈
这道题为简单题;
写之前思路还是非常清晰,由于才开始刷算法,并且使用刚开始使用Java所以可能对平台,和语法不太熟悉(无语)
***思路:***使用两个栈完成,
- 第一个栈,所有进来的数据直接入栈;
- 第二个栈,第一个 数据先进来,之后进来的数据与栈顶的元素作比较,如果栈顶元素比新进来的大,新进来的元素不入栈,再次复制此时的栈顶元素(为了保持与第一个栈大大小相等,也保证了每次弹出一个元素,第二个栈的顶部都为该级别上的最小值。)
class MinStack {
Stack <Integer>stack1,stack2;
/** initialize your data structure here. */
public MinStack() {
// Stack <Integer> stack1=new Stack<>();
// Stack <Integer> stack2=new Stack<>();//在里面声明不行
stack1=new Stack<>();
stack2=new Stack<>();
}
public void push(int x) {
stack1.add(x);
if(stack2.isEmpty()||stack2.peek()>=x){ stack2.push(x);}
else{stack2.add(stack2.peek());}
}
public void pop() {
stack1.pop();
stack2.pop();
}
public int top() {
return stack1.peek();
}
public int min() {
return stack2.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();
*/