Java代码:为什么这不起作用?

FV3*_*389 5 java stack

这是我第一次在StackOverflow上发帖,如果我的帖子格式不标准,我很抱歉,如果我的问题很愚蠢,请原谅我.

我正在对hackerrank进行挑战,目前我的问题目标如下:

您有一个空序列,您将获得N个查询.每个查询都是以下三种类型之一:

  1. 将元素x推入堆栈.
  2. 删除堆栈顶部的元素.
  3. 打印堆栈中的最大元素.

我已经解决了,但我在讨论中看到了另一种解决方案,并考虑修改它.替代解决方案是:

public class Solution {

public static void main(String[] args) {

    Scanner inp = new Scanner(System.in);
    int n = inp.nextInt();
    Stack<Integer> S = new Stack<>();
    Stack<Integer> largest_stack = new Stack<>();
    largest_stack.push(0);

    for(int i=1; i<=n;i++) {
        int query = inp.nextInt();

        if(query==1){
            int newtop=inp.nextInt();
            S.push(newtop);

            if(S.peek()>=largest_stack.peek()){
                largest_stack.push(S.peek());     
            }
       }

        if(query==2) {
            if(S.peek()==largest_stack.peek()){
                largest_stack.pop();   
            }
            S.pop();   
        }
        if(query==3){
            System.out.println(largest_stack.peek());
        }
    }
}
}
Run Code Online (Sandbox Code Playgroud)

我想在这部分用newtop替换S.peek()

            if(S.peek()>=largest_stack.peek()){
                largest_stack.push(S.peek());     
            }
Run Code Online (Sandbox Code Playgroud)

所以我明白了

            if(S.peek()>=largest_stack.peek()){
                largest_stack.push(newtop);     
            }
Run Code Online (Sandbox Code Playgroud)

执行此操作后,它将通过默认测试用例.但它总共失败了9/27个测试用例.以下是其中一个失败的测试用例的一小部分.有100000个查询,但我只采取了前21个.

21
1 809288903
3
1 55967040
1 967650885
1 21752006
3
2
1 61250743
1 975612397
3
3
2
3
2
3
2
2
3
3
2
1 784642399
Run Code Online (Sandbox Code Playgroud)

它为什么失败?任何帮助将非常感激.

编辑:

如果我输入上面用非修改代码发布的值,我得到

809288903
967650885
975612397
975612397
967650885
967650885
809288903
809288903
Run Code Online (Sandbox Code Playgroud)

修改后的代码:

809288903
967650885
975612397
975612397
975612397
975612397
975612397
975612397
Run Code Online (Sandbox Code Playgroud)