添加StringArrayOfNumbers的输出未按预期进行

时间:2015-12-02 18:27:41

标签: java arrays

  

给定一个整数数组,检查数组中是否重复了任何数字。也就是说,数组是否有任何重复。

示例输入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

DRY RUN

当我运行代码时,我得到了我的Ans,因为我需要在我的for循环之后输入count = 0。谢谢大家给我你的看法。

Parameters                   Actual Output  Expected Output

{24,27,30}                    false         false

我的问题:为什么我没有得到预期的输出?

3 个答案:

答案 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)

您的代码有两个问题:

  1. 您将每个元素与自身进行比较。
  2. 您还要将每对数字进行两次比较,这可能会减少一次。
  3. 以下是可以解决这两个问题的示例代码:

    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;
    }