#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<unordered_map>
#include<queue>
#include<stack>
#include<string>
#include <set>
#include <unordered_set>
#include <map>
//* Definition for a binary tree node.
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
//Definition for singly-linked list.
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
//ans
class MedianFinder {
public:
void addNum(int num) {
small.push(num);
large.push(-small.top());
small.pop();
if (small.size() < large.size()) {
small.push(-large.top());
large.pop();
}
}
// Returns the median of current data stream
double findMedian() {
return small.size() > large.size() ? small.top() : 0.5 *(small.top() - large.top());
}
private:
priority_queue<long> small, large;
};
//i81
class Solution {
private:
priority_queue<int> small, large;
public:
void addNum(int num) {
small.push(num);
large.push(-small.top());
small.pop();
if (large.size() > small.size()) {
small.push(-large.top());
large.pop();
}
}
double findMedian() {
return small.top();
}
vector<int> medianII(vector<int> &nums) {
vector<int> ans;
for (auto aa : nums) {
addNum(aa);
ans.push_back(findMedian());
}
return ans;
}
};
int main()
{
vector<int> aa = { 1,2,22,1,3,1,1,7,8,5 };
MedianFinder ss;
double ans;
ss.addNum(3);
ans = ss.findMedian();
ss.addNum(4);
ans = ss.findMedian();
ss.addNum(2);
ans = ss.findMedian();
ss.addNum(10);
ans = ss.findMedian();
ss.addNum(100);
ans = ss.findMedian();
//vector<vector<int>> ans(23, vector<int>());
getchar();
return 0;
}
leetcode 295+ lintcode 81 priority_queue
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 这类题是一类典型的two priority queue的题目。维护两个heap,一个MinHeap,一个MaxHe...
- 一道经典的面试题。这道题在Leetcode上被列为Hard,而在Lintcode上被列为Super,不过掌握要点后...
- 这个题吧,相当复杂,需要你熟练掌握C++容器。下面是乐乐自己总结的备忘录吧:以后有机会公布电子版的xmind: 单...
- 原题 实现一个队列的操作 样例 解题思路 简单基础的一道题,用链表实现列队 注意,dequeue的时候如果是下面这...
- 原题 实现一个双端队列 样例 解题思路 自己构建一个双向链表 需要注意从前面pop出最后一个元素和从后面pop出最...