題目: LeetCode - 4. Median of Two Sorted Arrays
題目說明
給兩個由小到大排序的陣列,求兩陣列結合後的中位數。
解題思路
透過 Merge Sort 將兩個陣列結合,之後找出中位數即可。
參考解法
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
| static auto __ = []() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); return 0; }(); class Solution { public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int n = nums1.size() + nums2.size(); nums1 = merge(nums1, nums2); return n % 2 ? nums1[n / 2] : double(nums1[n / 2] + nums1[n / 2 - 1]) / 2; } private: vector<int> merge(vector<int>& v1, vector<int>& v2) { int n1 = v1.size(), n2 = v2.size(); vector<int> v(n1 + n2); int i = 0, i1 = 0, i2 = 0; while(i1 < n1 || i2 < n2) { if(i1 >= n1) v[i++] = v2[i2++]; else if(i2 >= n2) v[i++] = v1[i1++]; else v[i++] = v1[i1] < v2[i2] ? v1[i1++] : v2[i2++]; } return v; } };
|