题目描述:
知识点:创建栈,pop(),push(),peek(),Integer_MAX_VALUE
1.创建栈,pop(),push(),peek()
参考:剑指 Offer 09. 用两个栈实现队列_jcxj2934的博客-CSDN博客
2.Interger_MAX_VALUE
在有关最小值和最大值进行比较时,可以考虑用Integer.MIN_VALUE和Integer.MAX_VALUE
Integer.MAX_VALUE 表示int能表示整数的最大值
Integer.MIN_VALUE 表示最小值
使用:
min1=Integer.Max_VALUE;
min1 = Math.min(min,x);
max1=Integer.MIN_VALUE;
max1 = Math.max(max1,x);
3.代码
class MinStack {
private Stack<Integer> st1;
private Stack<Integer> st2;
/** initialize your data structure here. */
public MinStack() {
//两个栈
st1=new Stack<>();
st2=new Stack<>();
st2.push(Integer.MAX_VALUE);
}
public void push(int x) {
st1.push(x);
// min1=Math.min(min1,x);
//最小值应该和st2的顶部比较
st2.push(Math.min(st2.peek(),x));
}
public void pop() {
st1.pop();
st2.pop();
}
public int top() {
return st1.peek();
}
public int min() {
return st2.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();
*/
/**
思路:遍历一遍,找到最小值的下标
将下标上的元素都导入栈2
pop()
将栈2的元素放回栈1
min只返回不移除
*/