Example 1:
nums1 = [1, 3] nums2 = [2] The median is 2.0
Example 2:
nums1 = [1, 2] nums2 = [3, 4] The median is (2 + 3)/2 = 2.5
有两种方法:
1、在合并的时候就排好序,再求中位值
2、先合并,然后进行排序,最后求中位值
第一种方法:
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
int i = 0,j = 0;
int *nums,index = 0; //nums用来存放排序的数组,index是当前索引
nums = (int *)malloc(sizeof(long int));
//从小到大排列
while(i < nums1Size || j < nums2Size){
//nums1结束
if(i == nums1Size && j < nums2Size){
while(j < nums2Size){
nums[index] = nums2[j];
index++;
j++;
}
//break;
}
//nums2结束
if(i < nums1Size && j == nums2Size){
while(i < nums1Size){
nums[index] = nums1[i];
index++;
i++;
}
//break;
}
if(nums1[i] > nums2[j]){
nums[index] = nums2[j];
index++;
j++;
continue;
}else if(nums1[i] < nums2[j]){
nums[index] = nums1[i];
index++;
i++;
continue;
}else if(nums1[i] == nums2[j]){
nums[index] = nums1[i];
index++;
nums[index] = nums2[j];
index++;
i++;
j++;
continue;
}
}
//返回中位值
if((nums1Size + nums2Size) % 2 == 1){
return (double) nums[(nums1Size + nums2Size - 1) / 2];
}else{
return ((double)nums[(nums1Size + nums2Size) / 2] + (double)nums[(nums1Size + nums2Size) / 2 - 1]) / 2;
}
}
第二种方法:
//先合并,然后再排序
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size){
int i,j,temp;
int* results;
results = (int *)malloc(sizeof(int) * (nums1Size + nums2Size));
for(i = 0; i < nums1Size; i++){
results[i] = nums1[i];
}
for(i = nums1Size,j = 0;j < nums2Size;i++,j++){
results[i] = nums2[j];
}
// 冒泡排序
for (i = 0; i < (nums1Size + nums2Size) - 1; i++) // 10个数,10 - 1轮冒泡,每一轮都将当前最大的数推到最后
{
for (j = 0; j < (nums1Size + nums2Size) -1 - i; j++) // 9 - i,意思是每当经过一轮冒泡后,就减少一次比较
if (results[j] > results[j+1])
{
temp = results[j];
results[j] = results[j+1];
results[j+1] = temp;
}
}
if((nums1Size + nums2Size) % 2 == 1){
double result = (double) results[(nums1Size + nums2Size - 1) / 2];
return result;
}else{
double result = ((double)results[(nums1Size + nums2Size) / 2] + (double)results[(nums1Size + nums2Size) / 2 - 1]) / 2;
return result;
}
}
main函数
int main() {
int* nums1;
int* nums2;
nums1 = (int *)malloc(sizeof(int));
nums2 = (int *)malloc(sizeof(int));
int i;
for(i = 0; i < 2; i++){
printf("get nums1:");
scanf("%d",&nums1[i]);
}
for(i = 0; i < 1; i++){
printf("get nums2:");
scanf("%d",&nums2[i]);
}
double result;
result = findMedianSortedArrays(nums1,2,nums2,1);
printf("\n%g",result);
//findMedianSortedArrays(nums1,2,nums2,2);
return 0;
}