-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLeetCode-295.cpp
More file actions
50 lines (46 loc) · 1.45 KB
/
LeetCode-295.cpp
File metadata and controls
50 lines (46 loc) · 1.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*************************************************************************
> File Name: LeetCode-295.cpp
> Author: ltw
> Mail: 3245849061@qq.com
> Created Time: Sat 16 May 2020 06:46:12 PM CST
************************************************************************/
#include <iostream>
using namespace std;
class MedianFinder {
public:
//对顶堆的引入一个是大顶堆一个是小顶堆
typedef pair<int, int> PII;
set<PII> s1, s2;
int t;
/** initialize your data structure here. */
MedianFinder() {
t = 0;
}
void addNum(int num) {
if (s1.size() == 0 || num <= -(s1.begin()->first)) {
s1.insert(PII(-num, t++));
} else {
s2.insert(PII(num, t++));
}
//调整中间位置
if (s1.size() + 2 == s2.size()) {
PII temp = *s2.begin();
temp.first = -(temp.first);
s1.insert(temp);
s2.erase(s2.begin());
}
if(s2.size() + 2 == s1.size()) {
PII temp = *s1.begin();
temp.first = -(temp.first);
s2.insert(temp);
s1.erase(s1.begin());
}
return ;
}
double findMedian() {
double val1 = s1.size() == 0 ? 0 : -(s1.begin()->first);
double val2 = s2.size() == 0 ? 0 : s2.begin()->first;
if (s1.size() == s2.size()) return (val1 + val2) / 2.0;
return s1.size() > s2.size() ? val1 : val2;
}
};