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_queuemaxHeap; priority_queue ,cmp> minHeap;};
数组中出现次数超过一半的数
class Solution {public: int MoreThanHalfNum_Solution(vector numbers) { if(numbers.size()==0) return 0; int pre=numbers[0]; int cnt=1; for(int i=1;i(numbers.size())/2) return pre; else return 0; }};