首页 文章

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

提问于
浏览
0

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

样本输入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 回答

  • 1

    同样更新您的代码,

    for(int i=0;i<arr.length-1;i++)
        {
            for(int j=i+1;j<arr.length;j++)
            {
                .........
                if(z[i]>=1){...}
            }
    
    }
    

    你的错误是,你首先取一个驻留在[i]中的值,然后再转换为j循环开始为0,所以很明显a [i = 0]和[j = 0]进行比较,返回true,你会得到错误的比较,根据你的要求,我的代码将工作,一旦值存储到[i = 0 ... n-1],现在不重复[j = 1 .. .n]再次除非直到修改为数组

  • 2

    您的代码有两个问题:

    • 您将每个元素与自身进行比较 .

    • 您还要将每对数字进行两次比较,这可以减少到一次 .

    这是一个示例代码,可以解决这两个问题:

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

    在你的代码中,改变:if((i!= j)&&(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);
     }
    

相关问题