StackWithMin
Description
定义一个栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的函数。在该栈中,要求调用时间复杂度为O(n)。
Solution1
在保存原先栈的基础上,重新定义一个栈来保存栈的最小值。
import java.util.Stack;
public class P165_StackWithMin {
public static void main(String[] args){
StackWithMin<Integer> stack = new StackWithMin<Integer>();
stack.push(3);
stack.push(4);
stack.push(2);
stack.push(1);
System.out.println(stack.min());
stack.pop();
System.out.println(stack.min());
stack.pop();
System.out.println(stack.min());
stack.pop();
System.out.println(stack.min());
stack.pop();
System.out.println(stack.min());
//System.out.println("stack("+stack+")");
}
}
class StackWithMin<T extends Comparable>{
//数据栈
private Stack<T> stackData = new Stack<T>();
//最小值栈
private Stack<T> stackMin = new Stack<T>();
public void push(T data){
//压入数据
stackData.push(data);
//若最小值栈中没有数据,则压入的这个数字就是最小值
if(stackMin.isEmpty())
stackMin.push(data);
else{
//比较得出最小值
T temp = stackMin.peek();
if(temp.compareTo(data)<0)
stackMin.push(temp);
else
stackMin.push(data);
}
}
//函数pop?
public T pop(){
if(stackData.isEmpty())
return null;
stackMin.pop();
return stackData.pop();
}
public T min(){
if(stackMin.isEmpty())
return null;
return stackMin.peek();
}
}
Appendix
1.compareTo参考https://www.runoob.com/java/number-compareto.html
2.不熟,后续还得多看几遍