LeetCode:88. 合并两个有序数组(python)
定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
说明:
- 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
- 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
示例:
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3输出: [1,2,2,3,5,6]
思路:
- 双指针从
nums1
和nums2
的m
、n
尾部遍历 - 指针从
nums1
整体数组的尾部遍历 - 比较
nums1
和nums2
的m
、n
尾部的值,将较大值赋给nums1
整体数组的尾部,指针左移 - 注意特殊情况处理:
nums1
的尾指针已遍历结束,nums2
尾指针还未结束
附代码(Python3)
class Solution:
def merge(self, nums1, m, nums2, n):
t1, t2 = m-1, n-1 # nums1 和 nums2 的尾指针
t = m+n-1 # nums1 整体的尾指针
while t>=0 and t2>=0:
# 比较 nums1 和 nums2 的尾部数据,大则添加至 nums1 整体数组,尾指针左移
if nums1[t1] > nums2[t2]:
nums1[t] = nums1[t1]
t1 -= 1
else:
nums1[t] = nums2[t2]
t2 -= 1
t -= 1 # nums1 整体的尾指针左移
nums1[:t2+1] = nums2[0:t2+1] # 将 nums2 剩余值添加至 nums1 整体数组的对应位置
# nums1[:] = sorted(nums1[:m] + nums2[:]) # 一行代码
test = Solution()
nums1 = [1,2,3,0,0,0]
m = 3
nums2 = [2,5,6]
n = 3
test.merge(nums1, m, nums2, n)
nums1
[1, 2, 2, 3, 5, 6]