Java數組的交集、並集


// 求兩個數組的交集
public static int[] SameOfTwoArrays(int[] arr1, int[] arr2) {
  // 新建一個空數組,用於存儲交集,空數組長度應該為兩個數組中最小的。
  int temp[] = new int[arr1.length < arr2.length ? arr1.length : arr2.length];
  // 定義一個int的變量,初始值為0;用於交集數組的自增添加元素
  int k = 0;
  // 第一層for循環的作用是:遍歷獲取兩個數組中的某一個元素。如果從效率上來處理,應該遍歷較短的那個數組
  for (int i = 0; i < arr1.length; i++) {
    // 第二層for循環,遍歷獲取另一個數組的元素
    for (int j = 0; j < arr2.length; j++) {
      // 把兩個數組中遍歷出來的元素進行比較
      if (arr1[i] == arr2[j]) {
        // 如果兩個元素相等,就存入交集數組中,交集數組的index需要自增長,以便存放下一個相等元素
        temp[k++] = arr1[i];
        // 把第二層循環中的當前找到的與第一層循環相等的元素位置存放如數組最后一個元素
        arr2[j] = arr2[arr2.length - 1];
        // 刪除最后一個元素
        arr2 = Arrays.copyOf(arr2, arr2.length - 1);
        // 結束本次內循環
        break;
      }
    }
  }
  return Arrays.copyOf(temp, k);
}

// 求兩個數組的並集

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

  // 新建一個空數組,用於存儲交集,空數組長度應該為兩個數組的長度之和。
  int[] temp = new int[arr1.length + arr2.length];

  //將兩個數組拷貝到temp數組
  System.arraycopy(arr1, 0, temp, 0, arr1.length);
  System.arraycopy(arr2, 0, temp, arr1.length, arr2.length);

  //第一層循環,遍歷到第一個數組的最后
  for (int i = 0; i < arr1.length; i++) {

    //第二層循環,從第二個數組開始遍歷
    for (int j = arr1.length; j < temp.length; j++) {

      //如果第二個數組的元素等於第一個數組的元素,就刪除第二個數組的該元素
      if (temp[i] == temp[j]) {

        //將第二個數組的元素放到temp數組的最后
        temp[j] = temp[temp.length - 1];

        //刪除最后一個元素
        temp = Arrays.copyOf(temp, temp.length - 1);
        break;
      }
    }
  }
  Arrays.sort(temp);
  return temp;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM