问题 "Find Median from Data Stream" 我的代码有什么错误?

What is the mistake in my code for the problem "Find Median from Data Stream"?

最近 2 小时我一直在努力解决 LeetCode 上的问题 Find Median from Data Stream,但找不到我代码中的错误。

我的算法是放两个优先级队列,第一个是max-priority queue,存放小于median的元素,第二个是min-priority queue,存放大于median的元素.

这是我的代码:

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,  0, 6,  3, 1,  0, 0

我的输出:

6, 8,  6, 6, 6,5.5, 6,  6, 6,5.5, 5

预期输出:

6, 8,  6, 6, 6,5.5, 6,5.5, 5,  4, 3

由于 Jerry Jeremiah 评论了代码的问题,

在行中,if(x>num)min.push(x); 您完全忽略了 num 并将 x 推入队列。您必须更改它,您的代码才会被接受。