找出C ++中整数数组中位数的程序
假设我们必须实现一个名为MedianClass的类,其中包含以下方法-
add(value)这会为数据结构添加一个值。
median()查找数据结构中当前存在的所有数字的中位数。
因此,如果我们加上5、3、8并找到中位数,则输出将为5.0,然后如果我们加上9并找到中位数,则输出将为6.5。
为了解决这个问题,我们将遵循以下步骤-
左右定义优先级队列
定义addNum方法,它将数字作为输入-
如果left为空或num<left的顶部元素,则,
在左侧插入num
除此以外
在右边插入num
如果left的大小<right的大小,那么,
temp:=右侧的顶部元素
从右边删除项目
将温度插入左侧
如果left的大小-right的大小>1,则,
temp:=左侧的顶部元素
从左侧删除项目
将温度插入右边
定义findMedian()方法,其作用如下-
如果left的大小>right的大小,则返回left的顶部,否则(left的顶部+right的顶部)/2让我们看一下下面的实现以获得更好的理解-
示例
#include <bits/stdc++.h>
using namespace std;
typedef double lli;
class MedianClass {
priority_queue <int> left;
priority_queue <int, vector <int>, greater<int>> right;
public:
void addNum(int num) {
if(left.empty() || num<left.top()){
left.push(num);
}else right.push(num);
if(left.size()<right.size()){
lli temp = right.top();
right.pop();
left.push(temp);
}
if(left.size()−right.size()>1){
lli temp = left.top();
left.pop();
right.push(temp);
}
}
double findMedian() {
return
left.size()>right.size()?left.top():(left.top()+right.top())*0.5;
}
};
main(){
MedianClass ob;
ob.addNum(5);
ob.addNum(3);
ob.addNum(8);
cout << ob.findMedian() << " ";
ob.addNum(9);
cout << ob.findMedian() << endl;
}输入值
ob.addNum(5); ob.addNum(3); ob.addNum(8); cout << ob.findMedian() << endl; ob.addNum(9); cout << ob.findMedian() << endl;输出结果
5.0 6.5