尝试一
结果:答案正确:恭喜!您提交的程序通过了所有的测试用例
代码:
import java.util.Stack;
public class Solution {
private int min;
private Stack<Integer> stack=new Stack<>();
public void push(int node) {
if(stack.size()==0){
min=node;
}else{
if(node<min){
min=node;
}
}
stack.push(node);
}
public void pop() {
if(stack.size()>0){
int r=stack.pop();
/*弹出的元素大于min,就可以不用求min了*/
if(r>min){
return;
}
/*弹出的元素不大于min,就要重找min了*/
Stack<Integer> stack1=new Stack<>();
min=stack.pop();
stack1.push(min);
int size=stack.size();
for(int i=0;i<size;++i){
int temp=stack.pop();
stack1.push(temp);
if(temp<min){
min=temp;
}
}
/*最小值确定之后,要把stack1中的元素装入stack*/
for(int i=0;i<size+1;++i){
stack.push(stack1.pop());
}
}
}
public int top() {
return stack.peek();
}
public int min() {
return min;
}
}
思路:在push时,比较push进去的元素,得出最小值。pop时,当pop的元素小于等于min时,就在剩下的stack中查找最小元素。
结论
- stack,queue这些数据结构,在取元素,加入元素之后(size要变)