zoukankan      html  css  js  c++  java
  • 两个有序数组合并为一个有序数组---python

    def merge(a, b):
        """
        合并2个有序数组,默认a,b都是从小到大的有序数组
        """
        # 1.临时变量
        i, j = 0, 0  # 分别标记2个数组的起始位置
        na, nb = len(a), len(b)  # 分别标记2个数组的长度
        temp = []  # 临时存放空间
        # 2.只要2个数组不为空:比较大小a[i]a[j],依次填入temp
        while i <= na - 1 and j <= nb - 1:
            if a[i] <= b[j]:
                temp.append(a[i])
                i += 1
            else:
                temp.append(b[j])
                j += 1
        # 3.判断哪个数组还有剩余
        if i <= na - 1:
            start = i
            end = na - 1
            # 4.将剩余部分添加到temp中
            temp.extend(a[start:end + 1])
        else:
            start = j
            end = nb - 1
            temp.extend(b[start:end + 1])
        # 5.返回合并的新数组
        return temp
    
    if __name__ =='__main__':
        a = [1, 2, 4, 6, 9]
        b = [5, 8, 10, 22]
        mergeArr = merge(a, b)
        print(mergeArr)

    方法二:
    def merge_sort(nums1, nums2):
        m = []
        i, j = 0, 0
        l_1, l_2 = len(nums1)-1, len(nums2)-1
        # 当i,j的索引位置小于等于索引最大值的时候
        while i <= l_1 and j <= l_2:
            if nums1[i] <= nums2[j]:
                m.append(nums1[i])
                i += 1
            else:
                m.append(nums2[j])
                j += 1
        m = m + nums1[i:] + nums2[j:]
        return m
    if __name__ == '__main__':
        n1 = [1, 2, 3, 4, 5]
        n2 = [2, 4, 5, 6, 7]
        m = merge_sort(n1, n2)
        print(m)
        # [1, 2, 2, 3, 4, 4, 5, 5, 6, 7]

    方法三:

    也可以使用Python中的列表方法pop()来进行,只比较每个数组的第一位就可以,每次将两者小的一个数弹出添加到新的列表中,直到有一个列表为空:

    def merge_sort(nums1, nums2):
        m = []
        i, j = 0, 0
        while nums1 and nums2:
            if nums1[i] <= nums2[j]:
                temp = nums1.pop(i)
                m.append(temp)
            else:
                temp = nums2.pop(j)
                m.append(temp)
    
        m = m + nums1 + nums2
        return m

    方法四

    def merge(self, nums1, m, nums2, n):
            """
            :type nums1: List[int]
            :type m: int
            :type nums2: List[int]
            :type n: int
            :rtype: void Do not return anything, modify nums1 in-place instead.
            """
            for num in nums2:
                nums1[m] = num
                m += 1
            nums1.sort()
  • 相关阅读:
    Centos系统python2.x升级python3.x
    VirtualBox安装Ghost XP
    VirtualBox检查更新失败解决办法
    PyDev+eclipse的编码问题
    redhat开启linux server
    使用VNC实现多用户登录linux系统
    使用webdav实现文档共享
    各类软件使用说明
    linux安装apache软件的过程
    JavaScript获取DOM元素位置和尺寸大小
  • 原文地址:https://www.cnblogs.com/turningli/p/12466213.html
Copyright © 2011-2022 走看看