LeetCode 88. Merge Sorted Array

原题

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

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

给定两个排序的整型数组nums1和nums2,将nums2合并到nums1成一个排序数组。

批注: 你可以假设nums1中有足够的空间(空间大于或等于m+n)来存放来自nums2的额外元素。 nums1和nums2的初始空间分别是m和n。

分析

  1. 本题的难点在于,nums1的长度足够大,但是只初始化了m个,nums2所有的空间均初始化了,为n个
  2. 采用从nums1的最后一位开始插入,因为从前插入会很麻烦,后面的值都要往后退一位
  3. 分别同时从nums1和nums2的最后开始比较,谁大往nums1后插入,同时指针向前挪一位

代码实现

# 本题的重点在于nums1的空间是足够的,但是只初始化了m个
class Solution(object):
    def merge(self, nums1, m, nums2, n):
        """
        :type nums1: List[int]
        :type m: int
        :type nums2: List[int]
        :type n: int
        :rtype: void Do not return anything, modify nums1 in-place instead.
        """
        last_1 = m-1
        last_2 = n-1
        last = len(nums1) - 1
        while last_1 >=0 and last_2 >=0:
            if nums1[last_1] >= nums2[last_2]:
                nums1[last] = nums1[last_1]
                last_1 -= 1
            else:
                nums1[last] = nums2[last_2]
                last_2 -= 1
            last -= 1
            
        while last_2 >=0:
            nums1[last] = nums2[last_2]
            last_2 -= 1
            last -= 1
                    
                    
                    

  

原文地址:https://www.cnblogs.com/LiCheng-/p/6807767.html