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

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

  • 相关阅读:
    【LeetCode】- Valid Palindrome(右回文)
    高榕资本宾悦:未使用的企业家Testin云测试服务类故障
    2015第17周三专注
    2015第17周二
    2015第17周一
    2015第16周日
    2015第16周六学习java建议
    2015第16周五
    2015第16周四自控力
    2015第16周三知道做到
  • 原文地址:https://www.cnblogs.com/ditingz/p/12259717.html
Copyright © 2011-2022 走看看