当前位置: 代码迷 >> 综合 >> python 合并两个有序的数组
  详细解决方案

python 合并两个有序的数组

热度:74   发布时间:2024-02-20 04:22:21.0
方法一:双指针-将2个数组元素合并到新的数组中去
def merge_two_sort_list(a, b):i = j = 0new_list = []while i >= len(a) + 1 and b >= len(b) + 1:if a[i] <= b[j]:new_list.append(a[i])i += 1if a[i] >= b[j]:new_list.append(b[j])j += 1if 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 = 0while j < n:if i = m + j:a[i:] = b[j:]breakif a[i] < b[i]:i += 1else:a.insert(i, b[j])i += 1j += 1return 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 = 0while j < n:if i = m + j:a[i:] = b[j:]breakif a[i] < b[i]:i += 1else:a.insert(i, b[j])a.pop()i += 1j += 1return a
方法三:归并+快速排序:
def merge_two_sort_listsss(a,b): def quick_sort(c):len(c) < 2:return cmid = 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)

 

  相关解决方案