0

方法 nbGreaterThanFirst 返回 myStack 中大于或等于 myStack 顶部元素的元素数。假设堆栈的顶部是 5,并且有 7、3 和 9 的元素。它应该返回 9,因为它大于堆栈中的其余元素。算法的步骤对我来说似乎没问题,但它不起作用。有什么建议么?

import java.util.Stack;

public class greaterStack {
    public static int nbGreaterThanFirst(Stack<Integer> myStack) {
        int firstStack = myStack.peek(); // firstStack = 5
        for(int i=0; i<myStack.size(); i++) {
            if(myStack.peek() >= firstStack) { // if any element is greater than 5
                firstStack = myStack.peek();
                myStack.pop();
            }
        }
        return firstStack;
    }

    public static void main(String[] args) {
        Stack<Integer> s = new Stack<Integer>();
        s.push(1);
        s.push(3);
        s.push(7);
        s.push(5);

        System.out.println(nbGreaterThanFirst(s));
    }
}
4

1 回答 1

0

在循环中,只有当栈顶 >= 您当前的 firstStack 变量时,您才会弹出元素。因此,一旦您获得一个值低于当前 firstStack 值的元素,您的算法就不允许弹出该元素并且您停止在堆栈中移动。

对于具有元素 5、7、3、9 的堆栈,一旦您点击“3”,它将使您的 if 条件失败,并且不会从堆栈中弹出更多元素。因此,您永远不会到达“9”元素。

我的建议是将 pop() 移出 if 条件。每次迭代都弹出一次,以便检查所有元素。

int stackSize = myStack.size();
for(int i=0; i<stackSize; i++) {
        if(myStack.peek() >= firstStack) { // if any element is greater than 5
            firstStack = myStack.peek();
        }
        myStack.pop();
}
于 2013-06-22T12:53:20.473 回答