我有一个谷歌 foobar 挑战:
编写一个名为 answer(data, n) 的函数,该函数接收一个少于 100 个整数的列表和一个数字 n,并返回相同的列表,但将所有出现超过 n 次的数字完全删除。返回的列表应保留与原始列表相同的顺序 - 您不想混淆那些精心计划的轮班轮换!例如,如果 data 是 [5, 10, 15, 10, 7] 并且 n 是 1,则 answer(data, n) 将返回列表 [5, 15, 7] 因为 10 出现了两次,因此从完整列出。
这是我的回答:
public static int[] solution(int[] data, int n) {
// Your code here
int count,c=0;
int flag[]=new int[1000];
int b[]=new int[data.length];
for(int i=0;i<data.length;i++)
{ count=0;
if(flag[(data[i])]==0)
{
for(int j=0;j<data.length;j++)
{
if(data[i]==data[j])
count++;
}
if(count>n)
flag[(data[i])]=1;
else
{
flag[(data[i])]=2;
b[c++]=data[i];
}
}
else if(flag[(data[i])]==2)
{
b[c++]=data[i];
}
}
if(c==(data.length))
{
return b;
}
if(c==0)
{
int ne[]=new int[0];
return ne;
}
else
{
int ne[]=new int[c];
for(int k=0;k<c;k++)
{
ne[k]=b[k];
}
return ne;
}
}
它通过了 8 个测试用例,但最后一个测试用例失败了,我无法弄清楚测试用例会是什么,因为那个测试用例是隐藏用例。任何想法?