Blog.

合并两个有序数组

Cover Image for 合并两个有序数组
Bernie
Bernie

合并两个有序数组

leetcode 链接

思路:

  1. 从后往前遍历,从大到小依次放入 nums1 中
  2. 用 p1, p2 分别指向 nums1, nums2 的最后一个元素
  3. 用 p 指向 nums1 的最后一个元素
  4. 比较 p1, p2 的大小,将较大的元素放入 nums1 的最后一个位置,p 向前移动一位,p1 或 p2 向前移动一位
  5. 如果 p1 或 p2 有一个小于 0,则将另一个数组剩余的元素放入 nums1 中

typescript 解法

/**
 Do not return anything, modify nums1 in-place instead.
 */
function merge(nums1: number[], m: number, nums2: number[], n: number): void {
  let p1 = m - 1;
  let p2 = n - 1;
  for (let i = m + n - 1; i >= 0; i--) {
    if (p1 < 0) {
      nums1[i] = nums2[p2];
      p2--;
    } else if (p2 < 0) {
      nums1[i] = nums1[p1];
      p1--;
    } else if (nums1[p1] < nums2[p2]) {
      nums1[i] = nums2[p2];
      p2--;
    } else {
      nums1[i] = nums1[p1];
      p1--;
    }
  }
}

go 解法

func merge(nums1 []int, m int, nums2 []int, n int)  {
    p1 := m - 1;
    p2 := n - 1;
    for j := m + n - 1; j >= 0; j -- {
        if p1 < 0 {
            nums1[j] = nums2[p2]
            p2 --
        } else if p2 < 0 {
            nums1[j] = nums1[p1]
            p1 --
        } else if nums1[p1] > nums2[p2] {
            nums1[j] = nums1[p1]
            p1 --
        } else {
            nums1[j] = nums2[p2]
            p2 --
        }

    }
}