• Index

合并两个有序数组

Last updated: ... / Reads: 139 Edit

代码

package sort;

/**
 * 合并两个有序数组
 *
 * https://leetcode.cn/problems/merge-sorted-array/submissions/358529482/
 *
 * @author javaself
 * @date 2023/7/28
 */
class MergeArray {

  /**
   * 合并排序
   *
   * ----------------------------------------------------------------
   * leetcode刷题版本
   *
   * @param nums1 数组1
   * @param m     数组1大小
   * @param nums2 数组2
   * @param n     数组2大小
   * @author javaself
   */
  public static void merge(int[] nums1, int m, int[] nums2, int n) {
    // log.info("排序之前:{}", Arrays.toString(nums1));
    // log.info("排序之前:{}", Arrays.toString(nums2));
    // log.info("");

    int p1 = 0, p2 = 0; //双指针扫描
    int[] newArra = new int[m + n]; //新数组
    int temp;
    int i = 1; //用于打印日志

    while (p1 < m || p2 < n) {
      //找到小数据
      if (p1 == m) { //边界条件:如果数组1已经结束,就循环复制数组2到新数组
        temp = nums2[p2++];
      } else if (p2 == n) { //边界条件:如果数组2已经结束,就循环复制数组1到新数组
        temp = nums1[p1++];
      } else if (nums1[p1] < nums2[p2]) { //找到小数据:如果数组1的数据较小,就写入新数组
        temp = nums1[p1++];
      } else { //找到小数据:如果数组2的数据较小,就写入新数组
        temp = nums2[p2++];
      }

      //插入小数据到新数组
      newArra[p1 + p2 - 1] = temp;
      //   log.info("第{}趟:{}", i++, Arrays.toString(newArra));
    }

    // log.info("");
    // log.info("排序之后:{}", Arrays.toString(newArra));

    //复制新数组数据到数组1
    for (int j = 0; j < newArra.length; j++) {
      nums1[j] = newArra[j];
    }
  }
}


Comments

Make a comment

  • Index