原题
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。
分析
- 本题的难点在于,nums1的长度足够大,但是只初始化了m个,nums2所有的空间均初始化了,为n个
- 采用从nums1的最后一位开始插入,因为从前插入会很麻烦,后面的值都要往后退一位
- 分别同时从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