假设有两int 类型的数据 :int [] a0 = {0,5,7,9,11,13,18,30};
int [] a1 = {2,6,8,10,12,14,20,50};现在想要的结果是:要2个新数组 它是由:{0,5,18,20}和{2,14,20,50}就是a0[i]=a1[i-1]+1要全合并掉去5-6   7-8  9-10  11-12  13- 14合并成5-14 有什么好的算法

解决方案 »

  1.   

    楼主Java code里的是源数组,而{0,5,18,20}和{2,14,20,50}是结果数组 是吗?
    怎么将5-6  7-8  9-10  11-12  13- 14合并成5-14 ?a0[i]=a1[i-1]+1,那么当i=0时,是什么情况呢?
      

  2.   

    public class Test {
    public static void main(String[] args) {
    int[] a0 = { 0, 5, 7, 9, 11, 13, 18, 30 };
    int[] a1 = { 2, 6, 8, 10, 12, 14, 20, 50 }; int[] b0 = new int[8];
    int[] b1 = new int[8];
    //System.out.println(a0.length == a1.length);
    int j = 0, m = 0;

    for (int i = 0; i < a0.length; i++) {
    if (i == 0) {
    b0[j++] = a0[0];
    b1[m++] = a1[0];
    }

    if (i != 0) {
    while (a0[i] == a1[i - 1] + 1) {
    System.out.println("a0[" + i + "]=" + a0[i] + "\t" + "a1["
    + (i - 1) + "]=" + a1[i - 1]);
    b0[j++] = a0[i];
    b1[m++] = a1[i - 1];
    i++;
    }
    b0[j++] = a0[i];
    b1[m++] = a1[i];
    //System.out.println(i);
    }
    }

    //打印出结果
    for (int k = 0; k < b0.length; k++) {
    System.out.print(b0[k] + ",");
    }
    System.out.println();
    for (int k = 0; k < b1.length; k++) {
    System.out.print(b1[k] + ",");
    }
    }}这是我目前想到方法,但这样不行
      

  3.   

    源数组       int[] a0 = { 0, 5, 7, 9, 11, 13, 18, 30 };
          int[] a1 = { 2, 6, 8, 10, 12, 14, 20, 50 };:想要的结果:int[] b0 = new int[8];//期望结果 {0,5,18,30}
         int[] b1 = new int[8];//期望结果 {2,14,20,50}我都怀疑自己表达能力是不是有问题了 呵呵 
      

  4.   

    public static void main(String[] args){
            int[] A = {0,5,7,9,11,13,18,20};
            int[] B = {2,6,8,10,12,14,20,50};
            
            for(int i = 1; i < A.length; i++)
            {
                if(A[i] == B[i-1] + 1)
                {
                    A[i] = -1;
                    B[i-1] = -1;
                }
            }
            
            for(int i = 0; i < A.length; i++)
            {
                if(A[i] != -1)
                {
                    System.out.print(A[i] + " ");
                }
            }
            System.out.println();
            for(int i = 0; i < B.length; i++)
            {
                if(B[i] != -1)
                {
                    System.out.print(B[i] + " ");
                }
            }
        }
      

  5.   

    import java.util.*;public class Test7{
    static class Result{
    int[] a0;
    int[] a1;
    Result(int[] a0,int[] a1){
    this.a0=a0;
    this.a1=a1;
    }
    } public static void main(String[] args)throws Exception{
    int [] a0 = {0,5,7,9,11,13,18,30};
            int [] a1 = {2,6,8,10,12,14,20,50};
            Result r=go(a0,a1);
            a0=r.a0;
            a1=r.a1;
            
            System.out.println(Arrays.toString(a0));
            System.out.println(Arrays.toString(a1));
        }
        public static Result go(int[] a0,int[] a1){
        
         for(int i=1;i<a0.length;i++){
         if(a0[i]==a1[i-1]+1){
         a0=delete(a0,i);
         a1=delete(a1,i-1);
         i--;
         }
         }
         return new Result(a0,a1);
        }
        public static int[] delete(int[] a ,int i){
         int[] result=new int[a.length-1];
         System.arraycopy(a,0,result,0,i);
         if(i!=a.length-1){
         System.arraycopy(a,i+1,result,i,a.length-i-1);
         }
         return result;
        }
        
    }
      

  6.   

    程序会产生不少垃圾,你怎么不用ArrayList来保存你的范围呢?
      

  7.   

    Python版的解决方式
    '''
    Created on 2009-9-29@author: selfimpr
    @blog: http://blog.csdn.net/lgg201
    @mail: [email protected]
    '''def compress(data1, data2):
        if len(data1) != len(data2):
            raise RuntimeError, 'Please give me two datas of same length'
        i = 0
        while i < len(data1):
            while i + 1 < len(data1) and data2[i] + 1 == data1[i + 1]:
                data2[i] = data2[i + 1]
                del data1[i + 1]
                del data2[i + 1]
            i += 1
        return data1, data2if __name__ == '__main__':
        data1 = [0, 5, 7, 9, 11, 13, 18, 30]
        data2 = [2, 6, 8, 10, 12, 14, 20, 50]
        print compress(data1, data2)
        
      

  8.   

    Java版
    /**
     * @author selfimpr
     * @blog http://blog.csdn.net/lgg201
     * @mail [email protected]
     * @param args
     */
    public static void main(String[] args) {
    int[] array1 = {0, 5, 7, 9, 11, 13, 18, 30};
    int[] array2 = {2, 6, 8, 10, 12, 14, 20, 50};
    List<Integer> result1 = new ArrayList<Integer>();
    List<Integer> result2 = new ArrayList<Integer>();
    int count = array1.length;
    boolean flag = true;
    for(int i = 0; i < count; i ++) {
    if(flag) {
    result1.add(array1[i]);
    }
    if(i + 1 < count && array2[i] + 1 == array1[i + 1]) {
    flag = false;
    continue ;
    }
    flag = true;
    result2.add(array2[i]);
    }
    for(Integer i: result1) {
    System.out.print(i + ", ");
    }
    System.out.println();
    for(Integer i: result2) {
    System.out.print(i + ", ");
    }
    }
      

  9.   

     for(Integer i: result1)
    小弟不才,想问一下上面的for中的什么意思啊?是简写的便利集合吗?