返回比Java中的堆栈顶部更高的元素

时间:2013-06-22 11:11:22

标签: numbers integer stack

方法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));
    }
}

1 个答案:

答案 0 :(得分:0)

在循环中,只有当堆栈顶部是&gt; =当前的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();
}