【问题标题】:Error while designing Stack using ArrayList in java在 java 中使用 ArrayList 设计堆栈时出错
【发布时间】: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&lt;min) 而被设置为更高的值。但老实说,在这种情况下,将最小值保存在类文件中似乎是糟糕的设计。您可能最好删除它并始终在 getMin 方法中按需计算值。

标签: java stack


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    相关资源
    最近更新 更多