合并两个有序数组-88


力扣(LeetCode) 链接:https://leetcode.cn/problems/merge-sorted-array/description/

空间复杂度 O(1)

var merge = function (nums1, m, nums2, n) {
  let l = m - 1,
    r = n - 1
  let tail = n + m - 1
  let cur
  while (l >= 0 || r >= 0) {
    if (l === -1) {
      cur = nums2[r--]
    } else if (r === -1) {
      cur = nums1[l--]
    } else if (nums1[l] > nums2[r]) {
      cur = nums1[l--]
    } else {
      cur = nums2[r--]
    }
    nums1[tail--] = cur
  }
}

额外空间

var merge = function (nums1, m, nums2, n) {
  let res = []
  let cur
  let l = 0,
    r = 0
  while (l < m && r < n) {
    if (nums1[l] > nums2[r]) {
      cur = nums2[r++]
    } else {
      cur = nums1[l++]
    }
    res.push(cur)
  }
  console.log(res)
  if (l < m) {
    res = res.concat(nums1.slice(l, m))
  }
  if (r < n) {
    res = res.concat(nums2.slice(r, n))
  }
  for (let i = 0; i < res.length; i++) {
    nums1[i] = res[i]
  }
}

合并两个数组

function mergeArr(arr1, arr2) {
  // 初始化两个指针,分别指向 arr1 和 arr2
  let i = 0,
    j = 0
  // 初始化结果数组
  const res = []
  // 缓存arr1的长度
  const len1 = arr1.length
  // 缓存arr2的长度
  const len2 = arr2.length
  // 合并两个子数组
  while (i < len1 && j < len2) {
    if (arr1[i] < arr2[j]) {
      res.push(arr1[i])
      i++
    } else {
      res.push(arr2[j])
      j++
    }
  }
  // 若其中一个子数组首先被合并完全,则直接拼接另一个子数组的剩余部分
  if (i < len1) {
    return res.concat(arr1.slice(i))
  } else {
    return res.concat(arr2.slice(j))
  }
}

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