访谈:Java

访谈:Java,java,algorithm,Java,Algorithm,我正试图解决interviewstreet的中值挑战。我在这里看到了一个类似的问题:但我想找出我的方法有什么问题。我使用二进制搜索和排序的数组列表来找出每个点的中值。只有第1、第3和第10次测试通过,其余测试均因回答错误而失败。 问题: 代码如下: /** * @param args */ public static void main(String[] args) { Scanner in = new Scanner(System.in); long N = in.next

我正试图解决interviewstreet的中值挑战。我在这里看到了一个类似的问题:但我想找出我的方法有什么问题。我使用二进制搜索和排序的数组列表来找出每个点的中值。只有第1、第3和第10次测试通过,其余测试均因回答错误而失败。 问题: 代码如下:

/**
 * @param args
 */
public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    long N = in.nextLong();
    List<Long> list = new ArrayList<Long>();
    for(int i=0; i<N; i++){
        String op = in.next();
        long number = in.nextLong();
        performOperation(op, number, list);
    }
}

private static void performOperation(String op, long number, List<Long> list) {
    int index = Collections.binarySearch(list, number);
    if(op.equalsIgnoreCase("r")){
        if(index < 0){
            System.out.println("Wrong!");//Doesn't exist
            return;
        }else{
            list.remove(index);//Remove any one occurence
        }
    }else{
        if(index < 0){
            list.add(-index-1, number);//Add in sorted list
        }else{
            list.add(index, number);//Add where the same number exists, should still be sorted.
        }
    }

    if(list.size() == 0){
        System.out.println("Wrong!");
    }else if(list.size()%2 == 0){
        double median = (list.get(list.size()/2) + list.get(list.size()/2 - 1))/2.0;
        if(median == Math.ceil(median))
            System.out.println((long)median);
        else
            System.out.println(median);
    }else{
        System.out.println(list.get((list.size()-1)/2));
    }
}
/**
*@param args
*/
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
长N=in.nextLong();
列表=新的ArrayList();

对于(int i=0;i我认为问题在于附加程序中的双精度输出。 我通过问题验证了该程序的输入:

2
a 1
a 1000000000
给出:

1
5.000000005E8
这种改变适用于上述情况(尽管不是很好):


请注意,ArrayList.add with index是O(n)。

您的代码试图回答的问题是什么?它就在我提到的链接中。无论如何,我已经在这里复制了它:您在pastebin上的链接不起作用。@KrackJack:只是好奇,您在哪里整理您的列表?嗯,这很尴尬:)。谢谢您指出它,这就是问题所在。
long median = (list.get(list.size()/2) + list.get(list.size()/2 - 1));  // median is multiplied by 2
    if(1==(median&1))
        //odd
    System.out.println(""+(median/2)+".5");
else
    System.out.println(median/2);