剑指Offer刷题(数据流中的中位数)

    技术2022-07-15  64

    剑指Offer刷题(数据流中的中位数)

    一.题目描述二.代码(C++)三.提交记录四.备注

    一.题目描述

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

    二.代码(C++)

    class Solution { private: priority_queue<int> min_q; priority_queue<int,vector<int>,greater<int> > max_q; public: void Insert(int num) { min_q.push(num); max_q.push(min_q.top()); min_q.pop(); if(min_q.size() < max_q.size()) { min_q.push(max_q.top()); max_q.pop(); } } double GetMedian() { if(min_q.size()>max_q.size()) return min_q.top(); else if(min_q.size()<max_q.size()) return max_q.top(); else return ( (double)(min_q.top()+max_q.top())/2.00); } };

    三.提交记录

    四.备注

    设置两个优先队列,分别储存大于中位数的元素和小于中位数的元素,同时,设置存储大于中位数的元素队列从大到小排列(保证队首是最小的元素)。

    Processed: 0.011, SQL: 9