#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int Search(int a[] , int );
int Search(int a[] , int t)
{
int left = 0 , mid;
int right = sizeof(a) -1;
while(left <= right)
{
mid = (left + right) / 2;
if(a[mid] > t)
{
right = mid -1;
}
else if( a[mid] < t)
{
left = mid +1;
}
else if(a[mid] == t)
{
return a[mid];
}
else if(a[mid] > t and a[mid-1] < t)
{
return a[mid-1];
}
else
{
return -1;
}
}
}
int main(void)
{
int n , m , t;
int i ,j = 0;
cin >> n >> m;
int a[n] , b[m];
for(int i = 0 ; i < n ; i++)
{
cin >> a[i];
}
sort(&a[0] , &a[n]);//排序
for( i = 0 ; i < m ; i++)
{
scanf("%d" , &t);
b[j] = Search( a ,t);
j++;
}
putchar('\n');
for( j = 0 ; j < m ;j++)
{
printf("%d\n",b[j] );
}
return 0;
}
有些数据会得出相近的答案
我是想着先快排 ,然后二分法查找,相等输出,再添加一个判断条件target(也就是t)大于mid-1再小于mid则是在中间可return
想要改进且如何在1s内完成 ,求解