查找两个数组之间的公共元素

时间:2016-01-25 13:36:37

标签: java arrays

我想找到两个不同大小的数组之间的公共元素,并将它们放在另一个数组中。 你能说出我的代码有什么问题吗?

    public static int[] numratEQelluar(int[] vargu, int[]varguPer)
{
    int count = 0;
    int [] nrQelluar = new int[count];
    for(int i = 0; i<vargu.length; i++)
    {
        for(int idx = 1;idx<varguPer.length ; idx++)
        {
            if(vargu[i] == (varguPer[idx]))
            {
                count++;
                for(int index = 0; index<nrQelluar.length; index++)
                {
                    nrQelluar[index] = vargu[i];    
                }

            }
        }

    }
    return nrQelluar;

2 个答案:

答案 0 :(得分:0)

它不起作用的原因确实是由于nrEqualler的内存分配不正确,正如评论中所述。

但是,我的代码中有一些变化:

  1. 使用LinkedList代替原始int []进行动态调整 数组效率更高(添加O(1))。

  2. 通过提取方法减少缩进和混淆索引。

  3. 所以这应该做:

    public static int[] numratEQelluar(int[] vargu, int[]varguPer){
        List<Integer> nrQelluar = new LinkedList<Integer> ();
        for(int i = 0; i < vargu.length; i++) {
            if (contains(varguPer, vargu[i])) nrQelluar.add(vargu[i]);
        }
        return toPrimitive(nrQelluar);
    }
    
    private static boolean contains(int [] array, int num){
        for(int i = 0; i < array.length; i++){
            if(array[i] == num) return true;
        }
        return false;
    }
    
    private static int[] toPrimitive(List<Integer> list) {
        int[] primitiveArray = new int[list.size()];
        for(int i = 0; i < list.size(); i++){
            primitiveArray[i] = list.get(i);
        }
        return primitiveArray;
    }
    

答案 1 :(得分:0)

问题出在这些代码行之间

int count = 0;
 int [] nrQelluar = new int[count];

新阵列的大小将为零。尝试将其更改为两个数组的长度之和。

更新了工作代码。

试试这段代码:

public static Integer[] findCommonElements(int[] arr1, int[] arr2){
    HashSet set = new HashSet<>();
    for(int i=0;i<arr1.length;i++){
      for(int j=0;j<arr2.length;j++){
        if(arr1[i] == arr2[j]){
          set.add(arr1[i]);
        }
      }
    }
    Integer[] resultArray = (Integer[]) set.toArray(new Integer[set.size()]);
    return resultArray;
  }

使用集合将确保您不会在结果数组中获得任何重复项。如果副本很好,那么您可以使用ArrayList存储公共元素,然后将它们转换为Array。