从网上找到一份编程练习题,我决定将里面的题目全都做一遍。
/*
题目: 有两个数组int[] a = {1,5,4,6};int[] b = {1,5,4,6,8,7,2},编写一个程序找出数组a,b中不同的元素
*/
/*
分析;这个题目想了好几种思路。
思路一:遍历a,b两数组中的所有元素,将a,b中相同的元素赋值为某固定值(0,-1等特殊含义的值)。
--> 但是int[]数组限制了数组中元素的范围,一旦数组中中出现该值,将出现问题。(行不通!)
思路二:遍历a,b两数组中的所有元素,将a,b中相同的元素赋值为a中第一次比较相等的值。
--> 这样能保证不会出现新值的问题。但是,一旦a,b数组中没有相同值,那么程序将失效。(行不通!)
思路三:定义两个临时的数组c,d分别记录a,b两个数组的角标。当a,b中有相同元素,将c,d中对应元素赋值为-1。遍历c,d输出a,b的不同元素。
--> 目前该思路还算通用。但是效率比较低。
-----------------------------------------------------------------------------------------------------------------------------
以上,三种思路都没有考虑到一个问题。就是 a中 或 b中自身有重复元素的情况。这是这个程序的不足之处!
思路四:使用HashSet实现。将a,b中的数全部加到HashSet中。这样就能保证不出现重复元素。
下面的代码是对思路三的实现。
*/
class ShuZuBuTongYuanSu {
public static void main(String[] args) {
int[] a={1,5,4,6};
int[] b={1,5,4,6,8,7,2};
//定义记录角标
int[] c=new int[a.length];
int[] d=new int[b.length];
//对a[] 和 b[]遍历
for (int i=0; i<a.length; i++){
for (int j=0; j<b.length; j++){
if (a==b[j]){ //如果a[] 和 b[]中元素相同
c=-1; //在c[]中将a[]出现相同元素的角标赋值为-1
d[j]=-1; //在d[]中将b[]出现相同元素的角标赋值为-1
}
}
}
//遍历c[]数组中a[]的不同元素
for (int i=0; i<c.length; i++){
if (c!=-1){
System.out.print(a);
}
}
//遍历d[]数组中b[]的不同元素
for (int j=0; j<d.length; j++){
if (d[j]!=-1){
System.out.println(b[j]);
}
}
}
}
|
|