`

关于数组的常见题型(交叉合并、交集、并集、插入、删除、比较)

阅读更多
public class Arrays{

//求两数组的交集,使交集重新生成一个数组

      public static int[] include(int[] a,int[] b){

             int temp=0;

             int[] arr=new int[a.length];

             for(int i=0;i<a.length;i++){

                   for(int j=0;j<b.length;j++){

                         if(a[i]==b[j]){

                        arr[temp]=a[i];

                        temp++;

           }

     }

  }

      int[] ras=new int[temp];

      for(int i=0;i<temp;i++){

      ras[i]=arr[i];

      }

      return ras;

}



//两数组交叉成一个新数组  例 int[] a={1,3,5,7,9,10};int[] b={2,4};  result: int[]c={1,2,3,4,5,7,9,10};

public static int[] merge(int[] a,int[] b){

      int[]c=new int[a.length+b.length];

      int m=0;

      int n=0; 

      for(int i=0;i<c.length;i++){

            if(i%2==0){

                         if(m>a.length-1){

                        c[i]=b[n];

                         }

                         else{

                               c[i]=a[m];

                               m++;

                         }

            }

            else{

                         if(n>b.length-1){

                                 c[i]=a[m];

                           }

                   else{

                        c[i]=b[n];

                        n++;

                         }

            } 

         }

      return c;

      }

//在数组的中间插入一个元素组成新数组

public static int[] insert(int[]arr,int x){

      int[] arrs=new int[arr.length+1];

      if(arr.length%2==0){

     for(int i=0;i<arr.length/2;i++){

                  arrs[i]=arr[i];

     }

     arrs[arr.length/2]=x;

     for(int i=arr.length/2;i<arr.length;i++){

                  arrs[i+1]=arr[i];

     }

      }else{

            for(int i=0;i<arr.length/2+1;i++){

                  arrs[i]=arr[i];

     }

     arrs[arr.length/2+1]=x;

     for(int i=arr.length/2+1;i<arr.length;i++){

           arrs[i+1]=arr[i];

     }

      }

      return arrs;

}

//删除数组的中间元素

public static int[] remove(int[] arr){

      int[] arrs=new int[arr.length-1];

      for(int i=0;i<arr.length/2;i++){

            arrs[i]=arr[i];

      }

      for(int j=arr.length/2+1;j<arr.length;j++){

            arrs[j-1]=arr[j];

      }

      return arrs;

      }

//两个数组合并成一个新的数组

public static int[] add(int[]a,int[]b){

      int[] c=new int[a.length+b.length];

      for(int i=0;i<a.length;i++){

            c[i]=a[i];

      }

      for(int j=0;j<b.length;j++){

            c[a.length+j]=b[j];

      }

      return c;

      }

//删除数组中与指定n相同的元素

public static int[] delElement(int arrs[],int n) {

      int temp=0;

      int[] arr=new int[arrs.length];

      for(int i=0;i<arrs.length;i++){

     if(arrs[i]!=n){

                  arr[temp]=arrs[i];

                  temp++;

     }

      }

      int[] ras=new int[temp];

      for(int i=0;i<ras.length;i++){

            ras[i]=arr[i];

      }

      return ras;

      }

//比较两个数组的大小

public static int compare(int[] arr1,int[] arr2) {  

           int flag=0;

      if(arr1.length!=arr2.length) {

          if(arr1.length>arr2.length) {

                  flag=1;

       } else {

                  flag=2;

      }

      }else {

      for(int i=0;i<arr1.length;i++) {

            if(arr1[i]>arr2[i]) {

                  flag=1; break;

            }else if(arr1[i]<arr2[i]) {

                         flag=2;break;

                   }

             }

      }

      return flag;

      }

//取数组中<=min    >=max  的元素组成的新数组

public static int[] delElement(int arrs[],int min,int max) {

      int[]arr=new int[arrs.length];

      int temp=0;

      for(int i=0;i<arrs.length;i++){

            if(arrs[i]<=min || arrs[i]>=max){

                         arr[temp]=arrs[i];

                         temp++;

            }

       }

      int []ras=new int[temp];

      for(int i=0;i<temp;i++){

              ras[i]=arr[i];

            }

      return ras;

      }

//求两个数组的并集   如int[]arr1={1,2,3,5,8}; int[]arr2={2,5,7,8,9};  result: int[]arr={1,2,3,5,7,8,9};

public static int[] merges(int[] arr1, int[] arr2) {

     int[] arr3 =new int[arr1.length];

        int ai= 0;

        for(int i= 0; i<arr1.length ;i++){   //此循环求两数组相同的元素组成的新数组arr3[]

        for(int j=0; j<arr2.length;j++){

        if(arr1[i]==arr2[j]){

                 arr3[ai]=arr1[i];

                 ai++;                

                }

             }

           }         

        int[] arr4 = new int[arr2.length-ai];  

        int a4=0;

        int a3= 0;

        for(int i = 0 ;i<arr2.length; i++){         //数组arr2中除去arr3[]中得到的新数组arr4

            if(arr2[i]!=arr3[a3]){

                  arr4[a4]=arr2[i];

                  a4++;

             }else{

                  a3++;

             }

          }       

        int[] arr = new int[arr1.length+arr4.length];

        for(int i = 0 ;i<arr.length; i++){           

        if(i<arr1.length){

             arr[i]=arr1[i];

             }else{

                  arr[i]=arr4[i-arr1.length];

             }

        }  

        return arr;

}

//打印数组

public static void printArray(int[]arr){

      for(int i=0;i<arr.length;i++){

     System.out.println(arr[i]);

  }

}

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics