两个数组比较的问题?

[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,可咋用程序实现呢, 想不出来)

5个回答

[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]

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问