大厂面试题练习-合并两个有序数组


题目:合并两个有序数组

示例

输入:[ 2, 8, 10, 13],[ 3, 7, 12]
输出:[ 2, 3, 7, 8, 10, 12, 13]

答案

方法一

利用 concat 合并两个数组然后排序。

let num1 = [2, 8, 10, 13],
  num2 = [3, 7, 12];
const res = num1.concat(num2).sort((a, b) => a - b);
console.log(res);

方法二

// 需要创建一个新数组
function merge(arr1, arr2) {
  const n = arr1 && arr1.length;
  const m = arr2 && arr2.length;
  let res = [];
  let i = 0,
    j = 0;
  while (i < n && j < m) {
    if (arr1[i] < arr2[j]) {
      res.push(arr1[i++]);
    } else {
      res.push(arr2[j++]);
    }
  }
  while (i < n) {
    res.push(arr1[i++]);
  }
  while (j < m) {
    res.push(arr2[j++]);
  }
  return res;
}

// 不创建新数组
function merge(nums1, nums2) {
  let len1 = nums1.length - 1;
  let len2 = nums2.length - 1;
  let len = nums1.length + nums2.length - 1;
  while (len1 >= 0 && len2 >= 0) {
    let val1 = nums1[len1],
      val2 = nums2[len2];
    if (val1 > val2) {
      nums1[len] = val1;
      len1--;
    } else {
      nums1[len] = val2;
      len2--;
    }
    len--;
  }
  return nums1;
}

文章作者: CassielLee
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 CassielLee !
评论
  目录