/**
* Your MedianFinder object will be instantiated and called as such:
* MedianFinder obj = new MedianFinder();
* obj.addNum(num);
* double param_2 = obj.findMedian();
*/
提交
/**
* Your MedianFinder object will be instantiated and called as such:
* MedianFinder* obj = new MedianFinder();
* obj->addNum(num);
* double param_2 = obj->findMedian();
*/
//使用队列实现 add时间复杂度On get时间复杂度O1
class MedianFinder {
LinkedList small,big;
LinkedList mid;
/** initialize your data structure here. */
public MedianFinder() {
small = new LinkedList();
mid = new LinkedList();
big = new LinkedList();
}
/**
* Your MedianFinder object will be instantiated and called as such:
* MedianFinder* obj = new MedianFinder();
* obj->addNum(num);
* double param_2 = obj->findMedian();
*/
/**
* Your MedianFinder object will be instantiated and called as such:
* MedianFinder* obj = new MedianFinder();
* obj->addNum(num);
* double param_2 = obj->findMedian();
*/
时间复杂度O(NLOGN),空间复杂度O(N)
共以下 13 个回答
java A,B;
class MedianFinder{
Queue
public MedianFinder(){
A = new PriorityQueue<>();
B = new PriorityQueue<>((x, y) -> (y – x));
}
}
/**
* Your MedianFinder object will be instantiated and called as such:
* MedianFinder obj = new MedianFinder();
* obj.addNum(num);
* double param_2 = obj.findMedian();
*/
提交
class MedianFinder {
public:
/** initialize your data structure here. */
MedianFinder() {
private: max_heap; // 大根,保存较小的 , greater > min_heap;
priority_queue
priority_queue<int, vector
};
打卡
思路:大顶堆+小顶堆
时间复杂度:o(logn)
空间复杂度:o(n)
“`c++
class MedianFinder {
public:
/** initialize your data structure here. */
MedianFinder() {
private:, greater > small_heap; , less > big_heap;
priority_queue<int, vector
priority_queue<int, vector
};
/**
* Your MedianFinder object will be instantiated and called as such:
* MedianFinder* obj = new MedianFinder();
* obj->addNum(num);
* double param_2 = obj->findMedian();
*/
“`
时间复杂度:1. 查找中位数 O(1), 2. 插入元素:O(logn)
空间复杂度:O(n)
//使用队列实现 add时间复杂度On get时间复杂度O1 small,big; mid; (); (); ();
class MedianFinder {
LinkedList
LinkedList
/** initialize your data structure here. */
public MedianFinder() {
small = new LinkedList
mid = new LinkedList
big = new LinkedList
}
}
//使用堆 add时间复杂度降到Ologn small,big; ();
class MedianFinder {
Queue
/** initialize your data structure here. */
public MedianFinder() {
big = new PriorityQueue
small = new PriorityQueue<>((a,b)->(b-a));
}
public void addNum(int num) {
if(small.isEmpty() || big.isEmpty())
small.add(num);
else{
int smallBiggest = small.peek();
int bigsmallest = big.peek();
if(num > bigsmallest){
big.add(num);
}else {
small.add(num);
}
}
while(small.size() > big.size() + 1){
big.add(small.remove());
}
while(small.size() < big.size()){
small.add(big.remove());
}
}
时间复杂度:1. 查找中位数 O(1), 2. 插入元素:O(logn)
空间复杂度:O(n)
建立一个大顶堆(元素从大到小排列,堆顶元素最小),一个小顶堆(元素从小到大排列,堆顶元素最大),始终保持A的元素大于等于B的元素,个数为偶数时中位数为两个堆顶元素和的一半,为奇数时中位数为A的堆顶元素
1. 时间复杂度:
1. 查找中位数 O(1): 获取堆顶元素使用 O(1) 时间;
2. 添加数字 O(logN) : 堆的插入和弹出操作使用 O(logN) 时间。
2. 复杂度 O(N) : 其中 N 为数据流中的元素数量,小顶堆 A和大顶堆 B 最多同时保存 N 个元素
class MedianFinder {, greater > A;//小根堆,保存较大的一半 , less > B;//小根堆,保存较大的一半
public:
/** initialize your data structure here. */
priority_queue<int, vector
priority_queue<int, vector
MedianFinder() {}
};
打卡
时间复杂度O(log(n)),空间复杂度O(n)
“`C++
class MedianFinder {
public:
/** initialize your data structure here. */
MedianFinder() {
private: min_heap; //小根堆保留大的 , greater > max_heap; //大根堆保留小的
priority_queue
priority_queue<int, vector
};
/**
* Your MedianFinder object will be instantiated and called as such:
* MedianFinder* obj = new MedianFinder();
* obj->addNum(num);
* double param_2 = obj->findMedian();
*/
“`
class MedianFinder { mi;//大根堆 ,greater > ma;//小根堆
public:
/** initialize your data structure here. */
priority_queue
priority_queue<int,vector
MedianFinder() {
};
/**
* Your MedianFinder object will be instantiated and called as such:
* MedianFinder* obj = new MedianFinder();
* obj->addNum(num);
* double param_2 = obj->findMedian();
*/
时间复杂度O(NLOGN),空间复杂度O(N)