[code="java"]
int [] a={1,3,5,6,7,8,9,10}
int [] b={1,2,3,4,5,6,7,8,9,10}
如题,两个数组a数组八个数,b数组十个数,并且这两个数组都是按从小到大顺序排列的,咋用程序算出b数组比a数组多的两个数并且输出?
[/code]
:D (用肉眼一下就看出结果是2和4,可咋用程序实现呢, 想不出来)
[code="java"]public class Test1 {
/**
* @param args
*/
public static void main(String[] args) {
int [] a={1,3,5,6,7,8,9,10};
int [] b={1,2,3,4,5,6,7,8,9,10};
int lengtha=a.length;
int lengthb=b.length;
int length;
int min[];
int max[];
if(lengtha>lengthb){
length=lengthb;
min=b;
max=a;
}
else{
length=lengtha;
min=a;
max=b;
}
int i=0;
int j=0;
while(true){
if(i>=length-1)
break;
if(min[i]==max[j]){
i++;
j++;
continue;
}
if(min[i]>max[j]){
System.out.println(max[j]);
j++;
continue;
}
if(min[i]<max[j]){
i++;
continue;
}
}
}
}[/code]
用set的元素唯一的特性求两个数组的补集也可以做到,不过效率没那么高。
[code="java"] //求两个数组的差集
public static String[] minus(String[] arr1, String[] arr2) {
LinkedList list = new LinkedList();
LinkedList history = new LinkedList();
String[] longerArr = arr1;
String[] shorterArr = arr2;
//找出较长的数组来减较短的数组
if (arr1.length > arr2.length) {
longerArr = arr2;
shorterArr = arr1;
}
for (String str : longerArr) {
if (!list.contains(str)) {
list.add(str);
}
}
for (String str : shorterArr) {
if (list.contains(str)) {
history.add(str);
list.remove(str);
} else {
if (!history.contains(str)) {
list.add(str);
}
}
}
String[] result = {};
return list.toArray(result);
}
} [/code]
[code="java"]
int [] a={1,3,5,6,7,8,9,10};
int [] b={1,2,3,4,5,6,7,8,9,10};
int ai=0,bi=0,al=a.length,bl=b.length;
for(;;){
if(ai==al||bi==bl)break;
//只是比较b对于a不同的
if(b[bi]<a[ai]){
System.out.print(b[bi]+",");
bi++;
}else if(b[bi]==a[ai]){
ai++;
bi++;
}else {
ai++;
}
}
//若果由于a提前结束 b剩余的都是不一样的
for(;bi<bl;bi++)System.out.print(b[bi]+",");
[/code]
看着一楼的代码改改来的 呵
俺也写个试试
[code="java"]
public class TestCompareArray {
public static void main(String[] args) {
int [] a={1,3,5,6,7,8,9,10};
int [] b={1,2,3,4,5,6,7,8,9,10};
//首先获取长度大的数组,根据其长度可以得到长度小的数组
int [] maxArr = getMaxLenghArr(a, b);
int [] minArr = null;
if(maxArr.length == a.length) minArr = b;
else minArr = a;
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
//将长度小的数组的下标和值存入map
for(int i = 0 ; i < minArr.length ; i++){
map.put(i, minArr[i]);
}
for(int j = 0 ; j < maxArr.length ; j ++){
if(!map.containsKey(maxArr[j])){
System.out.println("第"+j+"个元素,值为:"+maxArr[j]);
}
}
}
public static int [] getMaxLenghArr(int [] a,int [] b){
if(a==null || b == null) return null;
if(a.length == b.length) return null;
if(a.length > b.length) return a;
else return b;
}
}
[/code]