给定一个整数数组,检查数组中是否重复了任何数字。也就是说,数组是否有任何重复。
示例输入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;
}
@Edit
当我运行代码时,我得到了我的Ans,因为我需要在我的for循环之后输入count = 0。谢谢大家给我你的看法。
Parameters Actual Output Expected Output
{24,27,30} false false
我的问题:为什么我没有得到预期的输出?
答案 0 :(得分:2)
同样更新您的代码,
for(int i=0;i<arr.length-1;i++)
{
for(int j=i+1;j<arr.length;j++)
{
.........
if(z[i]>=1){...}
}
}
你的错误是,你是第一个拿出一个值 a [i],再次进入j-loop以0开始,显然a [i = 0]和[j = 0]比较,返回 true ,你会得到 根据您的要求进行错误的比较,
我的代码就像,一旦存储到[i = 0 ... n-1]中的值选择, 现在不再重复[j = 1 ... n],除非直到将其修改为数组
答案 1 :(得分:1)
在您的代码中,更改: if((i!= j)&amp;&amp;(arr [i] == arr [j]))
更干净:
public boolean anyDuplicates(int[] arr)
{
for(int i=0;i<arr.length;i++)
{
for(int j=0;j<arr.length;j++)
if ((i!=j) && (arr[i]==arr[j]))
return true;
}
return false;
}
更快:
使用Set来设置值,并根据数组长度检查长度
public boolean anyDuplicates(int[] arr)
{
// => Integer[]
Integer[] array_Integer = ArrayUtils.toObject(arr);
// => Set<Integer>
Set<Integer> Set_Integer= new HashSet<Integer>(Arrays.asList(array_Integer));
// => size
int sz=Set_Integer.size();
return (sz!=arr.length);
}
答案 2 :(得分:1)
您的代码有两个问题:
以下是可以解决这两个问题的示例代码:
public boolean anyDuplicates(int[] arr) {
for(int i=0; i<arr.length-1; i++) {
for(int j=i+1; j<arr.length; j++)
if (arr[i]==arr[j])
return true;
}
return false;
}