美文网首页
88. Merge Sorted Array

88. Merge Sorted Array

作者: 飞飞廉 | 来源:发表于2024-01-18 15:24 被阅读0次

Given two sorted integer arrays nums1 and nums2 , merge nums2 into nums1 as one sorted array.

Note:

The number of elements initialized in nums1 and nums2 are m and n respectively.
You may assume that nums1 has enough space (size that is greater or equal to m + n ) to hold additional elements from nums2.
Example:

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

Output: [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) {
    var right = n - 1;
    var left = m - 1;
    var i = nums1.length - 1;
    while (right >= 0 && left >= 0) {
        if (nums2[right] > nums1[left]) {
            nums1[i] = nums2[right];
            right--;
        } else {
            nums1[i] = nums1[left];
            left--;
        }
        i--;
    }
    while(right >=0) {
        nums1[i] = nums2[right];
        right--;
        i--;
    }
};

混合插入有序数组,由于两个数组都是有序的,所有只需要按顺序比较大小,然后nums1的数组是足够大的,所以从nums1和nums2的数组末尾一个一个进行比较,把较大的数按顺序加入混合之后的末尾。需要三个变量left,right,和i,分别只想nums1、nums2和混合数组的末尾。进行while循环。如果left和right都大于等于0,那么再看nums1[left]和nums2[right],如果nums1[left] > nums2[right],则把nums1[left]插入混合数组的末尾,然后i--,left--;反之就把nums[right]加入混合数组的末尾,然后right和i都--;循环结束后,有可能left或者right还大于等于0;若right还大于等于0,那还要接着循环,将nums2中的数字继续考入nums1;若left大于等于0那就不用管,因为混合数组本身就存在nums1中。
更为简洁的代码如下

var merge = function(nums1, m, nums2, n) {
    var left = m - 1;
    var right = n - 1;
    var k = m + n - 1;
    while(right >= 0) {
        nums1[k--] = (left >=0 && nums2[right] < nums1[left]) ? nums1[left--] : nums2[right--]
    }
}

相关文章

网友评论

      本文标题:88. Merge Sorted Array

      本文链接:https://www.haomeiwen.com/subject/jexdodtx.html