88. 合并两个有序数组

Posted 人间烟火地三鲜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了88. 合并两个有序数组相关的知识,希望对你有一定的参考价值。

   

思路:
  指针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))

 

 

以上是关于88. 合并两个有序数组的主要内容,如果未能解决你的问题,请参考以下文章

88. 合并两个有序数组

88. 合并两个有序数组

「 每日一练,快乐水题 」88. 合并两个有序数组

「 每日一练,快乐水题 」88. 合并两个有序数组

# 88. 合并两个有序数组

LeetCode88. 合并两个有序数组