我正在阅读CTCI的书,发现这个答案令人困惑。目标是创建一个堆栈数据结构,该结构可以在O(1)中推送,弹出和最小化(获取堆栈中的最小元素)。我编写了一个具有两个堆栈的类,一个用于保存最小值,一个用作常规堆栈。代码如下。据我所知,这可以通过测试来完成。 public static class StackWithMin extends Stack<Integer>{ Stack<Integer> stack; Stack<Integer> minStack; public StackWithMin(){ stack = new Stack<Integer>(); minStack = new Stack<Integer>(); } public void push(int value){ if(value <= min()){ minStack.push(value); } stack.push(value); } public Integer pop(){ int value = stack.pop(); if(value == min()){ minStack.pop(); } return value; } public int min(){ if(minStack.isEmpty()){ return Integer.MAX_VALUE; } return minStack.peek(); } }但是,书中给出的答案对我来说并不完全清楚。我已经用Java学习了两门课程,但是用了C语言学习了最后两门,所以我的OOP概念有些生锈。该类中只有一个堆栈字段,并使用super调用更新“常规”堆栈,并使用s2调用更新最小堆栈。在Java visualizer中查看此内容仅显示一个堆栈对象,该对象显然存储了两个不同的堆栈。此实现有效,但是我不确定为什么。澄清将不胜感激!public class Q2 /* MinStack */ extends Stack<Integer> { private Stack<Integer> min = new Stack<Integer>(); public void push(int item) { if (min.isEmpty() || item < min()) { min.push(item); } super.push(item); } public Integer pop() { int item = super.pop(); if (item == min()) { min.pop(); } return item; } public Integer min() { return min.peek(); }
添加回答
举报
0/150
提交
取消