# 88. 合并两个有序数组

# 题目

给你两个有序整数数组 nums1nums2 ,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。

说明:

初始化  nums1 和 nums2 的元素数量分别为  m 和 n 。 你可以假设  nums1  有足够的空间(空间大小大于或等于  m + n)来保存 nums2 中的元素。

输入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,5,6], n = 3

输出: [1,2,2,3,5,6]

# 题解

# 双指针

/**
 * @param {number[]} nums1
 * @param {number} m
 * @param {number[]} nums2
 * @param {number} n
 * @return {void} Do not return anything, modify nums1 in-place instead.
 */
var merge = function(nums1, m, nums2, n) {
  let p1 = m - 1, // 标记第一个数组
    p2 = n - 1, // 标记第二个数组
    p = m + n - 1; // 标记合并后的位置
  while (p1 >= 0 && p2 >= 0) {
    nums1[p--] = nums1[p1] > nums2[p2] ? nums1[p1--] : nums2[p2--];
  }
  while (p2 >= 0) {
    nums1[p--] = nums2[p2--];
  }
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

时间复杂度: O(m+n) 空间复杂度: O(1)