题解 | #三个牛群中位数#
三个牛群中位数
https://www.nowcoder.com/practice/8bc0369faf7c4ac5ab336f38e859db05
考察的知识点:数组;
解答方法分析:
- 定义一个
mergeArrays
函数来合并三个有序数组,并定义一个findMedianSortedArray
函数来求中位数。 mergeArrays
函数中使用了三个指针来遍历三个有序数组,在每一轮循环中,将当前指针所指的最小元素添加到合并后的数组中。findMedianSortedArray
函数中调用了mergeArrays
函数将三个数组合并成一个有序数组然后根据合并后数组的长度判断中位数的位置,返回相应的值。
所用编程语言:C++;
完整编程代码:↓
class Solution { public: double findMedianSortedArray(vector<int>& herd1, vector<int>& herd2, vector<int>& herd3) { vector<int> mergedArray = mergeArrays(herd1, herd2, herd3); int size = mergedArray.size(); if (size % 2 == 0) { int mid = size / 2; return (mergedArray[mid - 1] + mergedArray[mid]) / 2.0; } else { int mid = size / 2; return mergedArray[mid]; } } private: vector<int> mergeArrays(vector<int>& herd1, vector<int>& herd2, vector<int>& herd3) { vector<int> mergedArray; int i = 0, j = 0, k = 0; while (i < herd1.size() && j < herd2.size() && k < herd3.size()) { if (herd1[i] <= herd2[j] && herd1[i] <= herd3[k]) { mergedArray.push_back(herd1[i]); i++; } else if (herd2[j] <= herd1[i] && herd2[j] <= herd3[k]) { mergedArray.push_back(herd2[j]); j++; } else { mergedArray.push_back(herd3[k]); k++; } } while (i < herd1.size()) { mergedArray.push_back(herd1[i]); i++; } while (j < herd2.size()) { mergedArray.push_back(herd2[j]); j++; } while (k < herd3.size()) { mergedArray.push_back(herd3[k]); k++; } return mergedArray; } };