二分法合并K个有序数组

复制代码
# 二分合并k个有序数组
nums1 = [2,3,18,23,118,283]
nums2 = [4,7,8,19,26,77,1262]
nums3 = [1,19,29,33,67,88]
nums4 = [36,47,55,88,128,765]
data = [nums1, nums2, nums3, nums4]

def mergeKnums(nums):
    n = len(nums)
    
    return binarySelect(nums, 0, n-1)

def merge2nums(nums1, nums2):
    if not nums1: return nums2
    if not nums2: return nums1
    
    i, j = 0, 0
    result = []
    while i < len(nums1) and j < len(nums2):
        if nums1[i] < nums2[j]:
            result.append(nums1[i])
            i += 1
        else:
            result.append(nums2[j])
            j += 1
    return result

def binarySelect(nums, left, right):
    if left == right: return nums[left]
    mid = left + (right-left)//2
    print(left, mid, right)
    nums1, nums2 = binarySelect(nums, left, mid), binarySelect(nums, mid+1, right)
    return merge2nums(nums1, nums2)
    
merge2nums(nums1, nums2)
mergeKnums(data)
复制代码

 

posted @   今夜无风  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2020-02-13 反欺诈系统设计过程中的对策与思考
2019-02-13 tensorflow中的tf.app.run()的使用
点击右上角即可分享
微信分享提示