zoukankan      html  css  js  c++  java
  • 牛客网-Python-数据流中的中位数(未结束)

    题目描述

    如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。

    代码:

    1.插入时先二分查找插入位置再进行插入

    2.Python进行除法时两个整型得到整型(最终想要结果为float)

    牛客该Python版本有问题

    # -*- coding:utf-8 -*-
    #排序
    class Solution:
        def __init__(self):
            self.numlist = []
        def Insert(self, num):
            # write code here
            l = 0
            r = len(self.numlist)-1
            if r == -1:
                self.numlist.append(num)
            elif r==0:
                if num>=self.numlist[0]:
                    self.numlist.append(num)
                else:
                    self.numlist.insert(0,num)
            else:
                while(l<=r):
                    mid = (l+r)//2
                    if self.numlist[mid]>num:
                        r = mid-1
                        if l>r:
                            self.numlist.insert(mid,num)
                    elif self.numlist[mid]<num:
                        l = mid+1
                        if l>r:
                            self.numlist.insert(mid,num)
                    else:
                        self.numlist.insert(mid,num)
        def GetMedian(self,n=None):
            # write code here
            l = len(self.numlist)
            if l%2 == 0:
                result = float((self.numlist[l//2-1]+self.numlist[l//2]))/2
            else:
                result = self.numlist[l//2]
            return result

    看答案大家用了大顶堆和小顶堆。

  • 相关阅读:
    WebGL——osg框架学习一
    webgl绘制粗线段
    ThreeJS实现波纹粒子效果
    WebGL——水波纹特效
    WebGL之shaderToy初使用
    有效提升职场竞争力
    Windows结构化异常处理浅析
    一起学习Boost标准库--Boost.StringAlgorithms库
    科学计算工具-Numpy初探
    进程动态拦截注入API HOOK
  • 原文地址:https://www.cnblogs.com/ditingz/p/12259717.html
Copyright © 2011-2022 走看看