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 }