两组数组,怎么判断这两组数组有匹配的,如果有两个匹配,则输出有两个,一个就输出有一个。

java题目
两组数组,怎么判断这两组数组有匹配的,如果有两个匹配,则输出有两个,一个就输出有一个。求解代码

    首先关于匹配,我们首先要达成下面的共识.

int ary1= {0,0};
int ary2 ={0};
//我们认为1个元素只能使用1次,所以这两个数组的匹配的个数是1个
//不能因为ary1的两个0都和ary2的1个0相同 ,就误以为2个数组能匹配的个数是2个

两个数组相匹配. 查找重复可以有很多方法.

    1: 集合法:    数组1 转成集合.数组2 转成集合. 然后利用集合2的元素依次去删除集合1里的元素, 能删除成功几次,那么就表示有多少个相同的元素

参考代码如下

import java.util.ArrayList;
import java.util.Arrays;

public class SimpleDemo2 {
public static void main(String[] args) {
Integer[] ary1 =  { 2,8,2 };//这里使用的int的包装类Integer
Integer[] ary2 = { 9,2,8};
ArrayList<Integer> list1 = new ArrayList<Integer>(Arrays.asList(ary1));//把数组转成集合,再把该集合作为参数构造1个ArrayList
ArrayList<Integer> list2 = new ArrayList<Integer>(Arrays.asList(ary2));
int count=0;//重复元素的个数
for (Integer a : list2) {
if(list1.remove(a)) {// 删除元素,如果成功.那么加1
count++;
}
}
System.out.println("2个数组的重复元素有:" + count + "个");
}
}

    2: for循环:  特别注意的是,使用过的元素要用标记出来, 否则会重复使用

public class SimpleDemo {
public static void main(String[] args) {
int[] ary1 = {1,0,6,8};//定义两个数组
int[] ary2 = {6,0,9,0};
boolean[] b2=new boolean[ary2.length];
// 用于标记数组的某个元素,是否已经匹配成功过,默认全是false,如果匹配成功那么就设置为true

int count=0;//用于存储重复元素的个数
for (int i = 0; i < ary1.length; i++) {
for (int j = 0; j < ary2.length; j++) {
if (ary1[i] == ary2[j] && !b2[j]) {
b2[j] = true;//匹配成功那么就设置为true
count++;
// System.out.println("数组1元素:" + ary1[i] + " ------\t数组2元素:" + ary2[j]);
break;
}
}
}
System.out.println("2个数组一共有"+count+"个重复元素");
}
}

    性能提升:  如果数组长度很长, 且2个数组的长度差别很大. 那么可以在外层循环,使用长度小的数组, 内层循环使用较长的数组. 这样可以提升性能

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-02-25
双重循环去逐个判断。追问

求代码

追答

详细的就不写了,大概写一下。

数组A;数组B;int count = 0;

for (int i = 0; i < A.length();  i++) {
    for (int j = 0; j < B.length(); j++) {
        if(A[ i ] == B[ j ]) {   //判断条件可能按数据类型不同会不同
            count++;
        }
    }
}
Systerm.out.println(count);

相似回答