Skip to content

Instantly share code, notes, and snippets.

@aajjbb
Created September 6, 2016 03:43
Show Gist options
  • Save aajjbb/3634a58a606002875925bfbbf437399a to your computer and use it in GitHub Desktop.
Save aajjbb/3634a58a606002875925bfbbf437399a to your computer and use it in GitHub Desktop.
//Get median of a sequence in O(log(n))
void balance() {
while (abs((int) (minHeap.size() - maxHeap.size())) > 1) {
if (minHeap.size() > maxHeap.size()) {
int tmp = minHeap.top();
minHeap.pop();
maxHeap.push(tmp);
} else {
int tmp = maxHeap.top();
maxHeap.pop();
minHeap.push(tmp);
}
}
}
int median_retrieve(void) {
if (minHeap.empty() && maxHeap.empty()) return 0;
if (minHeap.size() == maxHeap.size()) {
return min(minHeap.top(), maxHeap.top());
} else {
if (minHeap.size() > maxHeap.size()) {
return minHeap.top();
} else {
return maxHeap.top();
}
}
}
void median_insert(int x) {
if (x > median_retrieve()) {
minHeap.push(x);
} else {
maxHeap.push(x);
}
balance();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment