0088. Merge Sorted Array (E)

技术文章 11个月前 完美者
1,108 0

标签:代码实现   hold   归并   直接   新建   init   not   gre   数组   

Merge Sorted Array (E)

题目

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]

题意

将两个有序数组nums1和nums2合并成一个新的有序数组,且直接保存在nums1中。

思路

最简单的方法是新建一个m+n的新数组,归并排序后再复制到nums1中。但题目的意思很显然是不希望使用额外空间,因此可以采取以下做法:从nums1[m-1]和nums2[n-1]开始,向前遍历进行归并排序,将较大的值从nums1的m+n-1处开始依次向前存放。


代码实现

Java

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int i = m - 1, j = n - 1;
        int p = m + n - 1;

        while (i >= 0 && j >= 0) {
            if (nums1[i] < nums2[j]) {
                nums1[p--] = nums2[j--];
            } else {
                nums1[p--] = nums1[i--];
            }
        }

        while (j >= 0) {
            nums1[p--] = nums2[j--];
        }
    }
}

JavaScript

/**
 * @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 i = m - 1
    let j = n - 1
    let k = m + n - 1
    while (i >= 0 && j >= 0) {
        nums1[k--] = nums1[i] <= nums2[j] ? nums2[j--] : nums1[i--]
    }
    while (j >= 0) {
        nums1[k--] = nums2[j--]
    }
}

0088. Merge Sorted Array (E)

标签:代码实现   hold   归并   直接   新建   init   not   gre   数组   

原文地址:https://www.cnblogs.com/mapoos/p/14264332.html

版权声明:完美者 发表于 2021-01-13 11:10:22。
转载请注明:0088. Merge Sorted Array (E) | 完美导航

暂无评论

暂无评论...