给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。
请你找出这两个有序数组的中位数,
假设 nums1 和 nums2 不会同时为空。
public static double FindMedianFromTwoArray(int[] nums1, int[] nums2) {
int m = nums1.Length, n = nums2.Length;
double ret = int.MinValue;
if ((m + n) % 2 != 0) {//奇数
int midIndex = (m + n) / 2 + 1;//中位数index
int idm = 0, idn = 0;//两个数组的遍历标记位
for (int i = 0; i < midIndex; i++) {
bool isOne = false;
if (idm < m) {//如果第一个数组可取值
ret = nums1[idm];
isOne = true;
}
if (idn < n) {//第二个数组可取值,需要和第一个数组取值比较大小
if (isOne) {
if (ret > nums2[idn]) {
ret = nums2[idn];
isOne = false;
}
}
else {
ret = nums2[idn];
}
}
if (isOne) {//修改相应的标记位
idm++;
}
else {
idn++;
}
}
}
else {//偶数
int mIndex1 = (m + n) / 2, mIndex2 = mIndex1 + 1;
int idm = 0, idn = 0;
for (int i = 0; i < mIndex2; i++) {
int num = int.MaxValue;
bool isOne = false;
if (idm < m) {
num = nums1[idm];
isOne = true;
}
if (idn < n) {
if (isOne) {
if (num > nums2[idn]) {
num = nums2[idn];
isOne = false;
}
}
else {
num = nums2[idn];
}
}
if (isOne) {
idm++;
}
else {
idn++;
}
//偶数个数的中位数是中间两个数和的一半
if (idm + idn == mIndex2) {
ret = (ret + num) / 2;
}
else {
ret = num;
}
}
}
return ret;
}
题目来源:https://leetcode-cn.com/problemset/all/