我在解决黑客级别Stack Challenge:Maximum element时遇到了这个问题。
我有两个名为 s 和 max 的堆栈。 我需要从 s ' 删除 顶部元素。 如果此元素已从' s '中删除等于 最大' 最大的最顶层元素堆, 我还需要从 max 中删除顶部元素。
我尝试了代码1和代码2.代码1在一些测试用例中失败,而代码2通过了所有测试用例。有人可以解释我两个代码的区别吗?
if(!s.isEmpty()){
if(s.peek()==max.peek())
max.pop();
s.pop();
}
if(!s.isEmpty()){
int del_item=s.pop();
if(del_item==max.peek())
max.pop();
}
编辑:S和Max的类型相同,即整数。
' S'包含一组整数,Max跟踪' S'的最大元素。在S'上执行每次推送和弹出操作。我从问题中推断出,除非' s'是空的。因此,如果max为空,我没有检查。如果我错了,请纠正我。 这是原始问题:
https://www.hackerrank.com/challenges/maximum-element
这里是整个代码:
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
public static void main(String[] args) {
/* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
Scanner in = new Scanner(System.in);
int lines = in.nextInt();
Stack<Integer> s = new Stack<Integer>();
Stack<Integer> maxs = new Stack<Integer>();
int max=Integer.MIN_VALUE;
int num=0;
//maxs.push(max);
for(int i=0;i<lines;i++){
int command = in.nextInt();
switch(command){
case 1:
num= in.nextInt();
s.push(num);
if(maxs.isEmpty()||num>=maxs.peek()){
maxs.push(num);
}
break;
case 2:
if(!s.isEmpty()){
//This doesn't work
if(s.peek()==max.peek())
max.pop();
s.pop();
}
/*--------This works--------
int del_item=s.peek();
if(del_item==maxs.peek())
maxs.pop();
s.pop();
*/
/*--------This works--------
int del_item=s.pop();
if(del_item==maxs.peek())
maxs.pop();
*/
}
break;
case 3:
if(!maxs.isEmpty())
System.out.println(maxs.peek());
//else
//System.out.println(max);
break;
default:
break;
}
}
}
}