-
题目描述
-
解题思路心得
也是某年的408真题,看了最佳解法感觉自己写不出来……最佳解法大概和折半查找的思路差不多,因为已经是升序序列了,不全比较,直接选中位数比。又想了想也许也能写出来吧但是懒得写了
所以写了个循环比较前半部分选到中位数
-
代码
#include <iostream>
using namespace std;
int midfunc(int * arr, int* brr, int index)
{
int mid = arr[0];
for (int i = 0, j = 0, k = 0; k < index; k++)
{
if (arr[i] < brr[j])
{
mid = arr[i++];
}
else
{
mid = brr[j++];
}
}
return mid;
}
int main()
{
int n = 0;
int middle = 0;
while (1)
{
cin >> n;
if (n == 0)
break;
int *arr = new int[n];
int *brr = new int[n];
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
for (int i = 0; i < n; i++)
{
cin >> brr[i];
}
middle = midfunc(arr, brr, n);
delete[] arr;
delete[] brr;
cout << middle << endl;
}
return 0;
}