标签:pop 最小堆 line gre double 结果 max begin 剑指offer
1 class Solution { 2 private: 3 vector<int>min;//最小堆存的是大数(右边) 4 vector<int>max;//最大堆存的是小数(左边) 5 public: 6 void Insert(int num) 7 { 8 if(((min.size()+max.size())&1)==0)//偶数个数,插入右侧(最小堆) 9 { 10 if(max.size()>0 && num < max[0])//比最大堆中的数小,应放入最大堆,因此将最大堆中最大值放入最小堆 11 { 12 max.push_back(num); 13 push_heap(max.begin(),max.end(),less<int>());//容器插入后插入堆 14 num = max[0]; 15 pop_heap(max.begin(),max.end(),less<int>());//调整后才能从容器中删除 16 max.pop_back(); 17 } 18 //插入最小堆 19 min.push_back(num); 20 push_heap(min.begin(),min.end(),greater<int>()); 21 } 22 else//插入左侧(最大堆) 23 { 24 if(min.size() >0 && min[0] < num)//应插入最小堆 25 { 26 min.push_back(num); 27 push_heap(min.begin(),min.end(),greater<int>()); 28 num = min[0]; 29 pop_heap(min.begin(),min.end(),greater<int>()); 30 min.pop_back(); 31 } 32 //插入最大堆 33 max.push_back(num); 34 push_heap(max.begin(),max.end(),less<int>()); 35 } 36 } 37 38 double GetMedian() 39 { 40 int size = max.size()+min.size(); 41 if(size <= 0) 42 return 0; 43 if((size & 1) == 0)//偶数 44 { 45 return (double)((max[0] + min[0])/2.0);//注意2.0 46 } 47 else 48 { 49 return min[0]; 50 } 51 } 52 };
标签:pop 最小堆 line gre double 结果 max begin 剑指offer
原文地址:http://www.cnblogs.com/qqky/p/7123230.html