首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Interviewstreet median挑战: Java

Interviewstreet median挑战: Java
EN

Stack Overflow用户
提问于 2012-06-21 03:37:09
回答 1查看 1.2K关注 0票数 1

我正在尝试解决interviewstreet的中间挑战。我在这里看到了一个类似的问题:interviewstreet median challenge,但我想找出我的方法有什么问题。我使用二进制搜索和排序的ArrayList来找出每个点的中位数。只有第一次、第三次和第十次测试通过,其余的都是错误的答案而失败。问:http://pastebin.com/1QhbiB2U代码如下:

代码语言:javascript
复制
/**
 * @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));
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-21 05:05:46

我认为问题是在附加程序中的双倍输出。我验证了输入问题中的程序:

代码语言:javascript
复制
2
a 1
a 1000000000

提供:

代码语言:javascript
复制
1
5.000000005E8

这样的更改适用于上面的情况(尽管它不是很好):

代码语言:javascript
复制
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);

请注意,具有索引的ArrayList.add是O(n)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11126921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档