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; } };