1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
| #include <iostream> #include <vector> #include <queue> #include <iomanip> using namespace std;
class MedianFinder { public: MedianFinder() {
} void addNum(int num) { if (maxHeap.size() == minHeap.size()) { minHeap.push(num); maxHeap.push(minHeap.top()); minHeap.pop(); } else { maxHeap.push(num); minHeap.push(maxHeap.top()); maxHeap.pop(); } } double findMedian() { if (maxHeap.size() == minHeap.size()) { return (maxHeap.top() + minHeap.top()) / 2.0; } else { return maxHeap.top(); } }
private: priority_queue<int, vector<int>, less<int>> maxHeap; priority_queue<int, vector<int>, greater<int>> minHeap; };
void printArray(const vector<string>& nums) { cout << "["; for (size_t i = 0; i < nums.size(); i++) { cout << "\"" << nums[i] << "\""; if (i != nums.size() - 1) cout << ","; } cout << "]"; }
void printArray(const vector<vector<int>>& nums) { cout << "["; for (size_t i = 0; i < nums.size(); i++) { cout << "["; for (size_t j = 0; j < nums[i].size(); j++) { cout << nums[i][j]; if (j != nums[i].size() - 1) cout << ","; } cout << "]"; if (i != nums.size() - 1) cout << ","; } cout << "]"; }
int main() { MedianFinder medianFinder; vector<string> operations = {"MedianFinder", "addNum", "addNum", "findMedian", "addNum", "findMedian"}; vector<vector<int>> params = {{}, {1}, {2}, {}, {3}, {}}; vector<string> output;
for (int i = 0; i < operations.size(); i++) { if (operations[i] == "MedianFinder") { output.push_back("null"); } else if (operations[i] == "addNum") { medianFinder.addNum(params[i][0]); output.push_back("null"); } else if (operations[i] == "findMedian") { double median = medianFinder.findMedian(); stringstream ss; ss << fixed << setprecision(1) << median; output.push_back(ss.str()); } }
cout << "Input: " << endl; printArray(operations); cout << endl; printArray(params); cout << endl; cout << "Output: " << endl; printArray(output); cout << endl;
return 0; }
|