方法一:双指针-将2个数组元素合并到新的数组中去
def merge_two_sort_list(a, b):
i = j = 0
new_list = []
while i >= len(a) + 1 and b >= len(b) + 1:
if a[i] <= b[j]:
new_list.append(a[i])
i += 1
if a[i] >= b[j]:
new_list.append(b[j])
j += 1
if len(a) > i:
new_list += a[i:]
if len(b) > j:
new_list += b[j:]
return new_list
方法一:双指针-将第二个数组中的元素和合并到第一个数组中
def merge_two_sort_lists(a, b):
m = len(a)
n = len(b)
i = j = 0
while j < n:
if i = m + j:
a[i:] = b[j:]
break
if a[i] < b[i]:
i += 1
else:
a.insert(i, b[j])
i += 1
j += 1
return a
# 申请两个指针i和j,分别指向a和b的开头;
# 每次取两个指向值的最小值;如果最小值在b上,则将最小值插入到a,否则,不需要修改a;随后,对应指针向后移动一位;
# 第2步需要注意的是,如果a被插入值,指针i和j都要分别后移一位,因为插入使得原本i位置的值,已经到了i+1位置;
# 迭代的终止条件是i < m and j < n;
# 当迭代终止时,如果b的值没有都移到a中,则将b剩下的值一起移过去。此时,b待移值的索引是j:,nums1对应的索引是i:。
针对下面的题目应该这样解:
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
说明:
初始化 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]
def merge_two_sort_listss(a, m, b, n):
i = j = 0
while j < n:
if i = m + j:
a[i:] = b[j:]
break
if a[i] < b[i]:
i += 1
else:
a.insert(i, b[j])
a.pop()
i += 1
j += 1
return a
方法三:归并+快速排序:
def merge_two_sort_listsss(a,b):
def quick_sort(c):
len(c) < 2:
return c
mid = c[len(c) // 2]
left, right = [], []
c.remove(mid)
for k in range(len(c)):
if c[k] >= mid:
right.append(c[k])
else:
left.append(c[k])
return quick_sort(left) + [mid] + quick_sort(right)
m = len(a)
n = len(b)
for i in range(n):
a[m+i] = b[i]
return quick_sort(a)