
思路:
指针i和j分别遍历nums1和nums2;
取两指针较小者追加到res中,较小指针后移,较大者不动;
若两指针相等,则两者都追加到res中,两指针均后移;
i<m或j<n时,停止遍历,将两串之一剩余的部分有序序列追加到res中。
注:本题提交的时候,程序不用return,另外本题必须在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: None Do not return anything, modify nums1 in-place instead.
9 """
10 i = j = 0
11 while j < n and i < m:
12 if nums1[i] < nums2[j]:
13 i += 1
14 elif nums1[i] == nums2[j]:
15 i += 1
16 nums1.insert(i, nums2[j])
17 i += 1
18 j += 1
19 m += 1
20 elif nums1[i] > nums2[j]:
21 if i == 0:
22 nums1.insert(i, nums2[j])
23 else:
24 nums1.insert(i - 1, nums2[j])
25 j += 1
26 if i == m and j < n:
27 while j < n:
28 nums1[i] = nums2[j]
29 i += 1
30 j += 1
31 while nums1[-1] == 0:
32 nums1.pop(-1)
33 return nums1
34
35 def merge2(self, nums1, m, nums2, n):
36 """
37 :type nums1: List[int]
38 :type m: int
39 :type nums2: List[int]
40 :type n: int
41 :rtype: None Do not return anything, modify nums1 in-place instead.
42 """
43 nums1 = nums1[0:m] + nums2
44 nums1.sort()
45 return nums1
46
47 def merge3(self, nums1, m, nums2, n):
48 """
49 :type nums1: List[int]
50 :type m: int
51 :type nums2: List[int]
52 :type n: int
53 :rtype: None Do not return anything, modify nums1 in-place instead.
54 """
55 i, j = -1, 0
56 while j < len(nums2):
57 nums1[i] = nums2[j]
58 i -= 1
59 j += 1
60 nums1.sort()
61 return nums1
62
63
64 if __name__ == '__main__':
65 solution = Solution()
66 print(solution.merge3(nums1=[1, 2, 3, 0, 0, 0], m=3, nums2=[2, 5, 6], n=3))
67 # print(solution.merge3(nums1=[2, 0], m=1, nums2=[1], n=1))