c++ 面试题(算法类)

1,从无序的数据流中找到其中位数:(用大根堆和小根堆来实现)

 1 float getMidimum(vector<int>& nums) {
 2     priority_queue<int> bigHeap; // 大数优先
 3     priority_queue<int, vector<int>, greater<int>> smallHeap;  // 小数优先
 4     for (int i = 0; i < nums.size(); ++i) {   // 对每一个输入的元素
 5         if (bigHeap.empty() || nums[i] < bigHeap.top())
 6             bigHeap.push(nums[i]);
 7         else
 8             smallHeap.push(nums[i]);
 9     
10         while (bigHeap.size() > smallHeap.size() + 1) {
11             smallHeap.push(bigHeap.top());
12             bigHeap.pop();
13         }
14         while (smallHeap.size() > bigHeap.size() + 1) {
15             bigHeap.push(smallHeap.top());
16             smallHeap.pop();
17         }
18     }
19     float temp;// 如果两个堆大小相等
20     if (bigHeap.size() == smallHeap.size()) {
21         temp = float(bigHeap.top() + smallHeap.top()) / 2;
22     }
23     else if (bigHeap.size() < smallHeap.size())  // 如果小堆多一个元素
24         temp =  smallHeap.top();
25     else                                         // 如果大堆多一个元素
26         temp =  bigHeap.top();
27     return temp;
28 }
getMidimum

猜你喜欢

转载自www.cnblogs.com/zpcoding/p/10538140.html