java stack peek(),pop()操作无法按预期工作。 (黑客级别Stack Challenge:最大元素)

时间:2016-02-21 19:12:42

标签: java stack

我在解决黑客级别Stack Challenge:Maximum element时遇到了这个问题。

我有两个名为 s max 的堆栈。 我需要从 s ' 删除 顶部元素。 如果此元素已从' s '中删除等于 最大' 最大的最顶层元素堆, 我还需要从 max 中删除顶部元素。

我尝试了代码1和代码2.代码1在一些测试用例中失败,而代码2通过了所有测试用例。有人可以解释我两个代码的区别吗?

代码1

if(!s.isEmpty()){
    if(s.peek()==max.peek())
        max.pop();
    s.pop();
}

代码2

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

}

0 个答案:

没有答案