1 出现的bug1
public void push(int value) {
/**
* bug1: 并没有做到同步,如果有两个相同的最小值进入
* 1, 2, 3, 1
* 去掉一个1后,minStack为空,此时出现数组越界错误
* 解决: 为了达到同步, minStack的进栈规则应该改为 <= 时
* */
// 1. 如果两个栈都是空的,则都push
if (this.dataStack.empty() && this.minStack.empty()) {
this.dataStack.push(value);
this.minStack.push(value);
} else {
// 如果有元素,则两个栈中都有元素,minstack是其中最小的
// 查看minStack栈顶,进行比较
this.dataStack.push(value);
int minInMinStack = this.minStack.peek();
if (value <= minInMinStack) {
// 有了新的小元素,装入
this.minStack.push(value);
}
// 不是最小的元素,则不加入到最小栈中
}
}
出现问题的原因
只有小于dataStack的栈顶元素时,才将最新的value加入minStack,此时如果出现多个最小值,也只有一个最小值在其中,导致了最小值栈与数据栈不同步,最终发生了数组越界错误
解决
if (value <= minInMinStack) {
// 有了新的小元素,装入
this.minStack.push(value);
}