这是我第一次在StackOverflow上发帖,如果我的帖子格式不标准,我很抱歉,如果我的问题很愚蠢,请原谅我。
我正在对hackerrank进行挑战,目前我的问题目标如下:
您有一个空序列,您将获得N个查询。每个查询 是以下三种类型之一:
- 将元素x推入堆栈。
- 删除堆栈顶部的元素。
- 打印堆栈中的最大元素。
醇>
我已经解决了,但我在讨论中看到了另一个解决方案,并考虑修改它。替代解决方案是:
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