博客
关于我
【python刷题】多个有序数组
阅读量:470 次
发布时间:2019-03-06

本文共 1929 字,大约阅读时间需要 6 分钟。

合并两个排序数组

def mergeList(A, B):    s1 = len(A)    s2 = len(B)    i,j = 0,0    res = []    while i < s1 and j < s2:        if A[i] <= B[j]:            res.append(A[i])            i += 1        else:            res.append(B[j])            j += 1    res = res + A[i+1:] + B[j+1:]    return resA = [1,2,5,7,9]B = [2,4,6,8,10,11,34,55]res = mergeList(A, B)print(res)

合并多个有序列表

def mergeMultiList(lists):    import heapq    from collections import deque    lists = list(map(lambda x: deque(x), lists))    pq = []    for ind, val in enumerate(lists):        pq.append((val.popleft(), ind))    heapq.heapify(pq)    res = []    while pq:        value, index = heapq.heappop(pq)        print(value, index)        res.append(value)        if lists[index]:            heapq.heappush(pq, (lists[index].popleft(), index))    return reslists = [[1,2,5,7,9],[2,4,6,8,10,11,34,55],[1,3,5,8,10,15]]res = mergeMultiList(lists)print(res)

寻找两个有序列表中的中位数

class Solution:    """    @param A: An integer array.    @param B: An integer array.    @return: a double whose format is *.5 or *.0    """    def findMedianSortedArrays(self, A, B):        n = len(A) + len(B)        if n % 2 == 1:            return self.findKth(A, B, n / 2 + 1)        else:            smaller = self.findKth(A, B, n / 2)            bigger = self.findKth(A, B, n / 2 + 1)            return (smaller + bigger) / 2.0    def findKth(self, A, B, k):        if len(A) == 0:            return B[int(k - 1)]        if len(B) == 0:            return A[int(k - 1)]        if k == 1:            return min(A[0], B[0])        a = A[int(k / 2) - 1] if len(A) >= k / 2 else None        b = B[int(k / 2) - 1] if len(B) >= k / 2 else None        if b is None or (a is not None and a < b):            return self.findKth(A[int(k / 2):], B, int(k - k // 2))        return self.findKth(A, B[int(k / 2):], int(k - k // 2))s = Solution()print(s.findMedianSortedArrays([1, 2, 3, 4, 5, 6], [2, 3, 4, 5]))

转载地址:http://zfpbz.baihongyu.com/

你可能感兴趣的文章
Netty工作笔记0027---NIO 网络编程应用--群聊系统2--服务器编写2
查看>>
Netty工作笔记0028---NIO 网络编程应用--群聊系统3--客户端编写1
查看>>
Netty工作笔记0034---Netty架构设计--线程模型
查看>>
Netty工作笔记0050---Netty核心模块1
查看>>
Netty工作笔记0057---Netty群聊系统服务端
查看>>
Netty工作笔记0060---Tcp长连接和短连接_Http长连接和短连接_UDP长连接和短连接
查看>>
Netty工作笔记0063---WebSocket长连接开发2
查看>>
Netty工作笔记0070---Protobuf使用案例Codec使用
查看>>
Netty工作笔记0072---Protobuf内容小结
查看>>
Netty工作笔记0074---handler链调用机制实例1
查看>>
Netty工作笔记0077---handler链调用机制实例4
查看>>
Netty工作笔记0081---编解码器和处理器链梳理
查看>>
Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
查看>>
Netty工作笔记0085---TCP粘包拆包内容梳理
查看>>
Netty常用组件一
查看>>
Netty常见组件二
查看>>
netty底层源码探究:启动流程;EventLoop中的selector、线程、任务队列;监听处理accept、read事件流程;
查看>>
Netty心跳检测
查看>>
Netty心跳检测机制
查看>>
netty既做服务端又做客户端_网易新闻客户端广告怎么做
查看>>