Skip to content

力扣链接:88.合并两个有序数组

难度:⭐

解题关键词:数组

解题思路:从后面往前面,然后一直对比大小,将大的设置到 nums1 中的最后面。

typescript
function merge(nums1: number[], m: number, nums2: number[], n: number): void {
  // nums1 有效数字最后面
  let index1 = m - 1;
  // nums2 最后面
  let index2 = n - 1;

  // nums1 最后面
  let tail = m + n - 1;

  // 比较 nums1 和 nums2 最后面哪个最大
  let cur;
  while (index1 >= 0 || index2 >= 0) {
    // nums1 数组已经走完了
    if (index1 < 0) {
      cur = nums2[index2--];
    } else if (index2 < 0) { // nums2 数组已经走完了
      cur = nums1[index1--];
    } else if (nums1[index1] >= nums2[index2]) { // nums1 中后面的数字大
      cur = nums1[index1--];
    } else {
      cur = nums2[index2--];
    }

    // 设置到 nums1 最后面,然后将指针前移
    nums1[tail--] = cur;
  }
}