这是一道我觉得有点不是很好的简单题
题目:
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
思路:
这个题我弄了很久,最开始我是重头开始比较然后插入sum1对应的索引里面,但是在测试的时候nums的后面有时跟了一个0,我没搞懂他的用处,然后调了一会没弄出来,我就看了别人的方法,是从尾开始比较,将大的数存入nums1的扩展空间内,最后再将nums2的剩余量全部变到Nums1中
代码:
1 class Solution(object): 2 def merge(self, nums1, m, nums2, n): 3 """ 4 :type nums1: List[int] 5 :type m: int 6 :type nums2: List[int] 7 :type n: int 8 :rtype: void Do not return anything, modify nums1 in-place instead. 9 """ 10 p = m + n - 1 11 a = m - 1 12 b = n - 1 13 14 while a >= 0 and b >= 0: 15 if nums1[a] >= nums2[b]: 16 nums1[p] = nums1[a] 17 a -= 1 18 else: 19 nums1[p] = nums2[b] 20 b -= 1 21 p -= 1 22 while b >= 0: 23 nums1[p] = nums2[b] 24 p -= 1 25 b -= 1
大神代码:(其实思路差不多,只是比较简洁)
1 def merge(self, nums1, m, nums2, n): 2 while m > 0 and n > 0: 3 if nums1[m-1] >= nums2[n-1]: 4 nums1[m+n-1] = nums1[m-1] 5 m -= 1 6 else: 7 nums1[m+n-1] = nums2[n-1] 8 n -= 1 9 if n > 0: 10 nums1[:n] = nums2[:n]