在 java 中使用 ArrayList 设计 Stack 时出错
Error while designing Stack using ArrayList in java
我正在尝试寻找问题的答案 -
设计一个支持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()' 之后给出正确的 output.But,'getMin()' 方法应该 return ans 作为'-2'。给出错误答案如下:
Initaially stack :
-2 0 -3
After first getMin() = -3
Stack After pop() :
-2 0
After second getMin() = -3
请帮我解决这个问题。
getMin
需要在每次调用时将 min
重置为 (int)Math.pow(2,31)
即 Integer.MAX_VALUE
。
我正在尝试寻找问题的答案 - 设计一个支持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()' 之后给出正确的 output.But,'getMin()' 方法应该 return ans 作为'-2'。给出错误答案如下:
Initaially stack :
-2 0 -3
After first getMin() = -3
Stack After pop() :
-2 0
After second getMin() = -3
请帮我解决这个问题。
getMin
需要在每次调用时将 min
重置为 (int)Math.pow(2,31)
即 Integer.MAX_VALUE
。