实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作
这个类的设计上,采用两个栈,一个用来保存当前栈中的元素,其功能等同于一个正常的栈,记为 mStack;另一个栈用来保存每一步的最小值,记为 mMinStack.
public class MyStack1<T extends Comparable<T>> {
private Stack<T> mStack;
private Stack<T> mMinStack;
public MyStack1() {
mStack = new Stack<>();
mMinStack = new Stack<>();
}
public void push(T item) {
if (mMinStack.isEmpty()) {
mMinStack.push(item);
} else if (item.compareTo(getMin()) <= 0) {
mMinStack.push(item);
}
mStack.push(item);
}
public T pop() {
if (mMinStack.isEmpty()) {
throw new RuntimeException("your stack is empty.");
}
T item = mStack.pop();
if (item.compareTo(getMin()) == 0) {
return mMinStack.pop();
}
return item;
}
private T getMin() {
if (mMinStack.isEmpty()) {
throw new RuntimeException("your stack is empty.");
}
return mMinStack.peek();
}
}
public class MyStack2<T extends Comparable<T>> {
private Stack<T> mStack;
private Stack<T> mMinStack;
public void push(T item) {
if (mMinStack.isEmpty()) {
mMinStack.push(item);
} else if (item.compareTo(getMin()) <= 0) {
mMinStack.push(item);
} else {
T minItem = mMinStack.peek();
mMinStack.push(minItem);
}
mStack.push(item);
}
public T pop() {
if (mMinStack.isEmpty()) {
throw new RuntimeException("your stack is empty.");
}
mMinStack.pop();
return mStack.pop();
}
private T getMin() {
if (mMinStack.isEmpty()) {
throw new RuntimeException("your stack is empty.");
}
return mMinStack.peek();
}
}
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有