剑指offer 面试题64 数据流的中位数
struct cmp
{
bool operator()(double a, double b)
{
return a > b;
}
};
class Solution {
public:
void Insert(int num)
{
if (((maxHeap.size() + minHeap.size()) & 1 )== 0)//如果是偶数,插入到最大堆里面
{
if (minHeap.size()>0&&num > minHeap.top())
{
int numtmp = minHeap.top();
minHeap.pop();
minHeap.push(num);
num = numtmp;
}
maxHeap.push(num);
}
else
{
if (maxHeap.size()>0&&num < maxHeap.top())
{
int numtmp = maxHeap.top();
maxHeap.pop();
maxHeap.push(num);
num = numtmp;
}
minHeap.push(num);
}
}
double GetMedian()
{
if (((maxHeap.size() + minHeap.size()) & 1) == 0)//如果是偶数
{
if (maxHeap.size() + minHeap.size() == 0) return 0;
return (minHeap.top() + maxHeap.top()) / 2;
}
else
{
return maxHeap.size() > minHeap.size() ? maxHeap.top() : minHeap.top();
}
}
private :
priority_queue<double> maxHeap;
priority_queue<double,vector<double>,cmp> minHeap;
};
数组中出现次数超过一半的数
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
if(numbers.size()==0) return 0;
int pre=numbers[0];
int cnt=1;
for(int i=1;i<numbers.size();i++)
{
if(cnt==0)
{
pre=numbers[i];
cnt=1;
}
else if(numbers[i]==pre)
{
cnt++;
}
else
{
cnt--;
}
}
cnt=0;
for(int i=0;i<numbers.size();i++)
{
if(numbers[i]==pre)
cnt++;
}
if(cnt>(numbers.size())/2)
return pre;
else return 0;
}
};

浙公网安备 33010602011771号