给定一个整数数组,检查数组中是否重复了任何数字 . 也就是说,数组是否有任何重复 .
样本输入1
anyDuplicates({1,2,3,4})
样本输出1
false
样本输入2
anyDuplicates({11,22,33,44,22)
样本输出2
true
MyApproach
检查元素是否包含重复项 . 我采用了太多循环并检查元素是否包含多于或等于2次重复 . 如果是,我返回false.else我返回true .
public boolean anyDuplicates(int[] arr) {
boolean b1=false;
int count=0;
int z[]=new int[arr.length];
for(int i=0; i<arr.length; i++)
{ count=0; //@Edit
for(int j=0; j<arr.length; j++) {
if(arr[i]==arr[j]) {
count++;
}
}
z[i]=count;
if(z[i]>=2) {
b1=true;
break;
}
}
if(b1==true)
return true;
else
return false;
}
@编辑
DRY RUN
当我运行代码时,我得到了我的Ans,因为我需要在我的for循环之后输入count = 0 . 谢谢大家给我你的意见 .
Parameters Actual Output Expected Output
{24,27,30} false false
我的问题:为什么我没有得到预期的输出?
3 回答
您的代码有两个问题:
您将每个元素与自身进行比较 .
您还要将每对数字进行两次比较,这可以减少到一次 .
这是一个示例代码,可以解决这两个问题:
在你的代码中,改变:if((i!= j)&&(arr [i] == arr [j]))
更干净:
快点:
使用Set来放置值,并根据数组长度检查长度