LeetCode刷题笔记第88题:合并两个有序数组
想法一:
合并两个有序数组,先将两个数组合并成一个数组,然后对数组中的元素重新排序,得到合并的两个有序数组
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
# 合并两个有序数组
# 将nums2数组元素全部放入nums1的后面
nums1[m:] = nums2
# 返回nums1的重新排序
return nums1.sort()
想法二:
创建一个列表存放两个有序数组的元素,通过有序数组的长度进行遍历,将较小元素优先排入列表,将列表中的元素赋值给nums1。
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
# 创建一个列表存放两个有序数组的元素
sorted = []
p1, p2 = 0, 0
# 通过有序数组的长度进行遍历,将较小元素优先排入列表
while p1 < m or p2 < n:
if p1 == m:
sorted.append(nums2[p2])
p2 += 1
elif p2 == n:
sorted.append(nums1[p1])
p1 += 1
elif nums1[p1] < nums2[p2]:
sorted.append(nums1[p1])
p1 += 1
else:
sorted.append(nums2[p2])
p2 += 1
# 这里不能使用nums1=sorted,题目需要nums1 in-place
nums1[:] = sorted