1041 寻找两个正序数组的中位数
#include<iostream>
#include<algorithm>
#include<iomanip>
using namespace std;
// leetcode 4.
// https://leetcode.com/problems/median-of-two-sorted-arrays/
float func(int arr1[], int arr2[], int len_1, int len_2)
{
int arr[len_1+len_2];
int p = 0;
int q = 0;
int idx = 0;
while(p<len_1 && q<len_2)
{
if(arr1[p] <= arr2[q])
{
arr[idx++] = arr1[p++];
}
else
{
arr[idx++] = arr2[q++];
}
}
while(p<len_1)
{
arr[idx++] = arr1[p++];
}
while(q<len_2)
{
arr[idx++] = arr2[q++];
}
if( (len_1+len_2)%2!=0 )
{
return arr[(len_1+len_2)/2];
}
else
{
return ( arr[(len_1+len_2)/2] + arr[(len_1+len_2)/2-1] ) / 2.0;
}
}
int main()
{
int n_test;
cin>>n_test;
for(int i=0;i<n_test;i++)
{
int len_1;
int len_2;
cin>>len_1;
cin>>len_2;
int arr_1[len_1];
int arr_2[len_2];
for(int j=0;j<len_1;j++)
{
cin>>arr_1[j];
}
for(int j=0;j<len_2;j++)
{
cin>>arr_2[j];
}
// 输入的数据已经是有序了,不需要再排序
// sort(arr_1, arr_1+len_1);
// sort(arr_2, arr_2+len_2);
// 题目bug,不需要保留小数
cout<<func(arr_1, arr_2, len_1, len_2)<<endl;
}
}