首页 > 解决方案 > 在 java 中使用 ArrayList 设计堆栈时出错

问题描述

我正在尝试寻找问题的答案 - 设计一个支持推送、弹出、顶部和在恒定时间内检索最小元素的堆栈。

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

请帮我解决这个问题。

标签: javastack

解决方案


getMin每次调用时都需要重置min(int)Math.pow(2,31)aka 。Integer.MAX_VALUE


推荐阅读