如何解决我的代码中的“从数据流查找中位数”问题有什么错误?
过去2个小时,我一直在努力解决有关LeetCode的问题Find Median from Data Stream,但找不到我的代码中的错误。
我的算法是放置两个优先级队列,第一个是最大优先级队列,该队列存储小于中位数的元素,第二个是最小优先级队列,存储大于中位数的元素。 / p>
这是我的代码:
struct get_min{
bool operator()(int i,int j){
return i>j;
}
};
class MedianFinder {
//queue which stores elements which are greater than the median
priority_queue<int,vector<int>,get_min> max;
int minSize,maxSize;
//queue which stores elements which are less than the median
priority_queue<int> min;
public:
MedianFinder() {
minSize = 0;
maxSize = 0;
}
void addNum(int num) {
if(minSize>maxSize){
int x = min.top();
if(x<num){
max.push(num);
}else{
min.push(num);
max.push(min.top());
min.pop();
}
maxSize++;
}else if(minSize < maxSize){
int x = max.top();
if(x>num)min.push(x);
else{
max.push(num);
min.push(max.top());
max.pop();
}
minSize++;
}else if(minSize==0 && maxSize==0){
min.push(num);
minSize++;
}else{
int x = min.top();
int y = max.top();
if(num<=x){
min.push(num);
minSize++;
}else{
max.push(num);
maxSize++;
}
}
}
double findMedian() {
if(minSize> maxSize)return min.top();
else if(minSize<maxSize)return max.top();
else return (double(min.top()+max.top())/2);
}
};
对于以下数字被一一给出并且在将每个数字作为输入后应该输出这些数字的中位数的输入,我得到了错误的输出。
数字流:
6,10,2,6,5,3,1,0
我的输出:
6,8,5.5,5
预期输出:
6,4,3
解决方法
Jerry Jeremiah注释了代码问题,
在行if(x>num)min.push(x);
中,您完全忽略了num
并将x
推入队列。您必须更改它,您的代码才能被接受。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。