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

时间:2017-01-25 08:43:07

标签: java stack

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

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

  

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

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

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

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());
        }
    }
}
}

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

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

所以我得到

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

这样做后,它会通过默认的测试用例。但它总共失败了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

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

编辑:

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

809288903
967650885
975612397
975612397
967650885
967650885
809288903
809288903

修改后的代码:

809288903
967650885
975612397
975612397
975612397
975612397
975612397
975612397

0 个答案:

没有答案