【发布时间】:2021-07-19 16:49:13
【问题描述】:
我正在努力寻找问题的答案 - 设计一个支持 push、pop、top 和在恒定时间内检索最小元素的堆栈。
import java.util.*;
public class StackImplement{
public static void main(String []args){
MinStack obj = new MinStack();
obj.push(-2);
obj.push(0);
obj.push(-3);
System.out.println("Initaially stack :");
obj.display();
System.out.println();
System.out.println("After first getMin() = " + obj.getMin());
obj.pop();
System.out.println("Stack After pop() : ");
obj.display();
System.out.println();
System.out.println("After second getMin() = " + obj.getMin());
}
}
class MinStack {
int top = -1;
int min = (int)Math.pow(2,31);
List<Integer> stack;
public MinStack() {
stack = new ArrayList<Integer>();
}
public void push(int val) {
stack.add(val);
top++;
}
public void pop() {
stack.remove(top);
top--;
}
public int top() {
int x = stack.get(top);
return x;
}
public int getMin() {
for(int x:stack){
if(x<min)
min = x;
}
return min;
}
public void display(){
for(int x:stack)
System.out.print(x +" ");
}
}
我已经编写了上面的程序,但是在 'getMin()' 方法中遇到了问题。第一次 'getMin()' 给出正确的输出。但是在 'pop()' 之后,'getMin()' 方法应该返回 ans 为 '-2'。错误答案如下:
Initaially stack :
-2 0 -3
After first getMin() = -3
Stack After pop() :
-2 0
After second getMin() = -3
请帮我解决这个问题。
【问题讨论】:
-
您将最小值保存在一个字段中,并且只有在您发现较小的值时才更新它。因此,一旦设置了 -3,它就永远不会因为
if(x<min)而被设置为更高的值。但老实说,在这种情况下,将最小值保存在类文件中似乎是糟糕的设计。您可能最好删除它并始终在 getMin 方法中按需计算值。