给定大小分别为m和n的升序排列数组,计算两个正序数组合并之后的中位数(保留一位小数)。例如,输入为1234和56749时,输出结果为4.5。C语言
时间: 2024-02-22 08:56:46 浏览: 65
可以使用归并排序的思想来解决这个问题。具体来说,我们可以定义两个指针i和j,分别指向两个数组的起始位置。然后比较两个指针所指的元素,将较小的元素放入一个新的数组中,同时移动指针。重复这个过程,直到将所有的元素都放入新的数组中。
如果数组的长度之和为奇数,那么中位数就是新数组的中间元素;如果数组的长度之和为偶数,那么中位数就是新数组的中间两个元素的平均值。
下面是一份参考代码:
#include <stdio.h>
#include <stdlib.h>
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
int n = nums1Size + nums2Size;
int* nums = (int*)malloc(sizeof(int) * n);
int i = 0, j = 0, k = 0;
while (i < nums1Size && j < nums2Size) {
if (nums1[i] < nums2[j]) {
nums[k++] = nums1[i++];
} else {
nums[k++] = nums2[j++];
}
}
while (i < nums1Size) {
nums[k++] = nums1[i++];
}
while (j < nums2Size) {
nums[k++] = nums2[j++];
}
double median;
if (n % 2 == 0) {
median = (nums[n/2-1] + nums[n/2]) / 2.0;
} else {
median = nums[n/2];
}
free(nums);
return median;
}
int main() {
int nums1[] = {1, 2, 3, 4};
int nums2[] = {5, 6, 7, 4, 9};
int nums1Size = sizeof(nums1) / sizeof(int);
int nums2Size = sizeof(nums2) / sizeof(int);
double median = findMedianSortedArrays(nums1, nums1Size, nums2, nums2Size);
printf("%.1f\n", median);
return 0;
}
这个程序的输出结果是4.5。