请用c语言实现问题:给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (m+n)) 。
时间: 2023-03-13 14:42:53 浏览: 158
寻找两个正序数组的中位数 .md
首先,将两个数组合并,排序为一个新数组。然后,用两个指针分别从开头和结尾遍历新数组,当它们相遇的时候,返回中位数。下面是c语言实现的代码: int findMedian(int* nums1, int m, int* nums2, int n) {
int i, j, k;
int *arr = malloc((m+n)*sizeof(int));
for (i = 0, j = 0, k = 0; i < m && j < n; k++) {
if (nums1[i] <= nums2[j])
arr[k] = nums1[i++];
else
arr[k] = nums2[j++];
}
while (i < m)
arr[k++] = nums1[i++];
while (j < n)
arr[k++] = nums2[j++];
int median = (m + n) / 2;
if ((m + n) % 2 == 0)
return (arr[median] + arr[median - 1]) / 2;
else
return arr[median];
}
阅读全文