【问题标题】:Intersection between two arrays [duplicate]两个数组之间的交集[重复]
【发布时间】:2017-01-04 00:57:15
【问题描述】:

我在查找 java 中两个数组之间的差异时遇到了问题,我的情况就像想象我们有两个数组一样。数组A = {1 , 3 , 5 , 7 ,9 } 和数组B = {1 ,3 , 4 ,5 , 6 ,7 , 10}。我想要两个结果第一个结果是一个数组,它从数组“A”中找到丢失的对象,第二个结果是一个数组,它在数组“B”中找到添加的对象。第一个结果应该是 Like A'={9},第二个结果应该是 B'={4,6,10}
感谢您的 cmets。

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 答案here可能对您有所帮助
  • 发布一些代码向我们展示你的努力
  • 转为HashSet,做运算,转回数组
  • @NicolasFilotto 我是一名新手程序员,对于这种情况,我必须学习我现在不擅长的算法。尝试了使程序崩溃的代码,因为它循环遍历两个数组的所有对象并导致崩溃。结果很好。我在这个项目上工作了一段时间,我的时间已经过去了,我已经在这里发布了这个问题。

标签: java arrays intersection difference


【解决方案1】:

我认为下面的代码可以帮助你

/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{

    // your code goes here
    Map<Integer,Integer> map1=new HashMap<Integer,Integer>();
    int A[]={1 , 3 , 5 , 7 ,9 };
    int B[]={1 ,3 , 4 ,5 , 6 ,7 , 10};
    int i;
    for(i=0;i<B.length;i++)
    map1.put(B[i],1);
    for(i=0;i<A.length;i++)
    {

            Integer v1=map1.get(A[i]);
        if(v1==null)
        {

            System.out.println("Missing number="+A[i]);
        }

    }

    for(i=0;i<A.length;i++)
    {

        Integer v1=map1.get(A[i]);

        if(v1!=null)
        {int val=v1;
            map1.put(A[i],val+1);

    //      System.out.println("Missing number="+A[i]);
        }

    }
    for(i=0;i<B.length;i++)
    {
            Integer v1=map1.get(B[i]);
        if(v1!=null && v1<2)
        {

            System.out.println("Added element in B="+B[i]);
        }

    }


}
}

【讨论】:

  • 这解决了我的问题,谢谢你的时间。
  • 我还有一个问题,你能描述一下这段代码在做什么吗?
  • 首先将第二个数组的所有元素存储在地图中。然后遍历第一个数组(一个接一个地选择元素)并继续检查元素是否存在于地图中。如果元素存在于地图中,则意味着这不是缺少元素,如果元素不存在于地图中,则意味着这是缺少第一个数组的元素。
  • 对于第二个问题,最初当我遍历第二个数组时,我将数组元素作为键,值为一。这意味着我们在地图中的第二个数组的每个元素都有元素和值 1。现在我们再次遍历遍历第一个数组,如果元素存在于地图中,那么我们增加值或将值 2 放入地图中的元素。这意味着现在 map 中存在的第一个数组的元素的值为 2。现在遍历第二个数组并检查 map 中的元素。如果该元素的值小于 2,则表示该元素已添加到第二个数组中。
【解决方案2】:

使用这个逻辑

int a1[n1],a2[n2],count1,count2,temp;

for(i=0;i<n1;i++)
{ temp=0;
  for(j=0;j<n2;j++)
   {
     if(A[i]==B[j])
      temp=1;
   }
 if(temp==0)
  {a1[count1]=A[i];
  count1++;
  }
}

for(i=0;i<n2;i++)
{ temp=0;
  for(j=0;j<n1;j++)
   {
     if(A[i]==B[j])
      temp=1;
   }
 if(temp==0)
  {a2[count2]=B[i];
  count2++;
  }
}

现在数组 a1[] 包含在 A[] 中但不在 B[] 中的元素,a2[] 包含在 B[] 中但不在 A[] 中的元素。

【讨论】:

    【解决方案3】:

    使用 removeAll:

        List<Integer> a = Arrays.asList(1 , 3 , 5 , 7 ,9);
        List<Integer> b = Arrays.asList(1 ,3 , 4 ,5 , 6 ,7 , 10);
    
        ArrayList<Integer> c = new ArrayList<>(a);
        ArrayList<Integer> d = new ArrayList<>(b);
    
    
        c.removeAll(b);
        d.removeAll(a);
    
        System.out.println(c);
        System.out.println(d);
    

    【讨论】:

      猜你喜欢
      • 2013-08-29
      • 2017-12-29
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多