gpt4 book ai didi

java - Interviewstreet 中位数挑战 : Java

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:22 26 4
gpt4 key购买 nike

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

/**
* @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));
}
}

最佳答案

我认为问题出在附加程序中的 double 输出。我从输入问题中验证了该程序:

2
a 1
a 1000000000

给出:

1
5.000000005E8

这种改变适用于上述情况(虽然不是很好):

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)。

关于java - Interviewstreet 中位数挑战 : Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11126921/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com