Skip to content

合并两个有序数组

作者:guo-zi-xin
更新于:1 年前
字数统计:280 字
阅读时长:1 分钟

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

说明: 初始化nums1nums2需要合并的元素数量分别为 mn 。 你可以假设nums1 有足够的空间(空间大小大于或等于 m + n )来保存 nums2 中的元素。

  • 示例
javascript
// 输入:
const nums1 = [1,2,3,0,0,0], m = 3
const nums2 = [2,5,6],       n = 3
// 输出: [1,2,2,3,5,6]
typescript
  const getConcatArr = (nums1: number[], nums2: number[], m: number, n: number): void => {
    nums1.splice(m, n, ...nums2)
    nums1.sort((a,b)=> a - b)
    return nums1
  }
  getConcatArr(nums1, nums2)
typescript
/**
 * @param {number[]} nums1
 * @param {number} m
 * @param {number[]} nums2
 * @param {number} n
 * @return {void} Do not return anything, modify nums1 in-place instead.
 */
const getConcatArr = (nums1:number[], m:number, nums2:number[], n: number) => {
    let index1 = m - 1
    let index2 = n - 1
    let tail = m + n - 1
    while (index2 >= 0) {
        if (nums1[index1] > nums2[index2]) {
            nums1[tail] = nums1[index1]
            index1--
            tail--
        } else {
            nums1[tail] = nums2[index2]
            index2--
            tail--
        }
    }
}

let nums1 = [1, 2, 3];
let nums2 = [2, 5, 6];
getConcatArr(nums1, 3, nums2, 3)
console.log(nums1)
typescript
const getConcatArr = function(nums1:number[], m: number, nums2: number[], n: number):void {
    let len1:number = m - 1,
        len2:number = n - 1,
        len: number = m + n - 1
    while(len2 >= 0) {
        if(len1 < 0) {
            nums1[len--] = nums2[len2--]
            continue
        }
        nums1[len--] = nums1[len1] >= nums2[len2] ? nums1[len1--]: nums2[len2--]
    }
};

人生没有捷径,就像到二仙桥必须要走成华大道。