295. Find Median from Data Stream【H】【2.7】

原创 2016年06月02日 09:14:17

Median is the middle value in an ordered integer list. If the size of the list is even, there is no middle value. So the median is the mean of the two middle value.

Examples: 

[2,3,4] , the median is 3

[2,3], the median is (2 + 3) / 2 = 2.5

Design a data structure that supports the following two operations:

  • void addNum(int num) - Add a integer number from the data stream to the data structure.
  • double findMedian() - Return the median of all elements so far.

For example:

add(1)
add(2)
findMedian() -> 1.5
add(3) 
findMedian() -> 2

Credits:
Special thanks to @Louis1992 for adding this problem and creating all test cases.


Subscribe to see which companies asked this question

关键有两个,一个是使用最小堆

另一个是,算法上,把整个分成两部分,一个装较小的一半儿,一个装较大的一半儿





from heapq import *
class MedianFinder:
    def __init__(self):

        self.small = []
        self.large = []

        """
        Initialize your data structure here.
        """


    def addNum(self, num):

        s = self.small
        l = self.large

        if len(s) + len(l) < 2:
            if len(l) == 0:
                heappush(l,num)
            else:
                heappush(s,-heappushpop(l,num))
            return

        a = -heappop(s)
        b = heappop(l)

        maxx = max(a,max(b,num))
        minn = min(a,min(b,num))

        num = a + b + num - minn - maxx

        heappush(l,num)
        heappush(l,maxx)
        heappush(s,-minn)

        if len(s) < len(l) - 1:
            heappush(s, -heappop(l))


        """
        Adds a num into the data structure.
        :type num: int
        :rtype: void
        """


    def findMedian(self):


        s = self.small
        l = self.large
        if len(s) == len(l):
            return (l[0] - s[0]) / 2.0
        return l[0]/1.0

        """
        Returns the median of current data stream
        :rtype: float
        """


# Your MedianFinder object will be instantiated and called as such:
# mf = MedianFinder()
# mf.addNum(1)
# mf.findMedian()

相关文章推荐

[leetcode] 295. Find Median from Data Stream

Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...

leetcode 295 : Find Median from Data Stream

1、原题如下: Median is the middle value in an ordered integer list. If the size of the list is even, the...

295. Find Median from Data Stream

Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...
  • x_shuck
  • x_shuck
  • 2016年05月20日 23:01
  • 263

LeetCode295——Find Median from Data Stream

LeetCode295——Find Median from Data Stream 前提是Ordered List。 但是插入即addNum操作可能是无序的。 尝试过对序列排序再返回的办法结果是...

Leetcode 295. Find Median from Data Stream (Hard) (cpp)

Leetcode 295. Find Median from Data Stream (Hard) (cpp)
  • Niko_Ke
  • Niko_Ke
  • 2016年12月14日 00:54
  • 189

[leetcode] 295. Find Median from Data Stream

题目:Median is the middle value in an ordered integer list. If the size of the list is even, there is ...

leetcode No295. Find Median from Data Stream

QuestionMedian is the middle value in an ordered integer list. If the size of the list is even, ther...

leetcode 295. Find Median from Data Stream

Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...

LeetCode 295. Find Median from Data Stream(数据流中位数)

原题网址:https://leetcode.com/problems/find-median-from-data-stream/ Median is the middle value in an ...
  • jmspan
  • jmspan
  • 2016年04月16日 11:09
  • 399

Leetcode (295) Find Median from Data Stream

Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:295. Find Median from Data Stream【H】【2.7】
举报原因:
原因补充:

(最多只允许输入30个字)