我试图解决Interviewstreet.com的中位挑战。
我无法通过大多数测试用例。但根据我的理解,我的代码应该能正常工作。
以下是问题:https://www.interviewstreet.com/challenges/dashboard/#problem/4fcf919f11817
这是我的代码:
/* Sample program illustrating input and output */
import java.util.*;
class Solution{
public static void main( String args[] ){
// helpers for input/output
Scanner in = new Scanner(System.in);
int N;
N = in.nextInt();
String s[] = new String[N];
int x[] = new int[N];
ArrayList<Integer> items=new ArrayList<Integer>();
float result[]=new float[N];
//int itemindex=-1;
for(int i=0; i<N; i++){
s[i] = in.next();
x[i] = in.nextInt();
switch(s[i].charAt(0))
{
case 'r':
if(items.size()<=1)
{
result[i]=-1;
}
else
{
items.remove((Integer)x[i]);
int itemindex=items.size();
Collections.sort(items);
if((itemindex)%2==0)
{
result[i]=(float) ((items.get((itemindex/2))+items.get(((itemindex)/2)-1))/2.0);
}
else
{
result[i]=items.get((itemindex-1)/2);
}
}
break;
case 'a':
items.add(x[i]);
int itemindex=items.size();
Collections.sort(items);
if((itemindex)%2==0)
{
result[i]=(float)((items.get((itemindex/2))+items.get(((itemindex)/2)-1))/2.0);
}
else
{
result[i]=items.get((itemindex-1)/2);
}
break;
}
}
for(int j=0;j<N;j++)
{
if(result[j]==-1)
{
System.out.println("Wrong!");
}
else
{
if((result[j]*10)%10==0)
{
System.out.println((int)(result[j]));
}
else
{
System.out.println(result[j]);
}
}
}
}
}如果有人能帮我找出我的代码会失败的测试用例,我会非常感激的。
谢谢。
发布于 2012-10-24 21:39:54
@palacsint提到的另一点是对象删除的检查:根据挑战:
如果操作被删除,并且x号不在列表中,则输出“错误!”单行
您的代码没有对此进行检查:下面是您拥有的内容:
if(items.size()<=1)
{
result[i]=-1;
}
else .....当列表有单个项目或为空时,您的标记错误。显然,这不是挑战所要求的。因此,您应该放弃这个"if“块,只检查列表中remove的返回值:
boolean ok= items.remove((Integer)x[i]);
if (!ok){
result[i]=-1;
}https://codereview.stackexchange.com/questions/17874
复制相似问题