Skip to content

Files

Latest commit

 

History

History

0088

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

Description

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]

Tags: Array, Two Pointers

思路

题意是给两个已排序的数组 nums1nums2,合并 nums2nums1 中,两数组元素个数分别为 mn,而且 nums1 数组的长度足够容纳 m + n 个元素,如果我们按顺序排下去,那肯定要开辟一个新数组来保存元素,如果我们选择逆序,这样利用 nums1 自身空间足矣,不会出现覆盖的情况,依次把大的元素插入到 nums1 的末尾,确保 nums2 中的元素全部插入到 nums1 即可。

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int p = m-- + n-- - 1;
        while (m >= 0 && n >= 0)
            nums1[p--] = nums1[m] > nums2[n] ? nums1[m--] : nums2[n--];
        while (n >= 0)
            nums1[p--] = nums2[n--];
    }
}

结语

如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:awesome-java-leetcode