我用的二分算法,但是TLE了最后一个点。请各位dalao帮我看看哪里错了吧(用的C++语言)
#include <bits/stdc++.h>
using namespace std;
int search(int list_size,int nums[], int target) {
int left = 0, right = list_size - 1, mid,qsxb;
while (left <= right) {
mid = left + (right - left) / 2; // 防止溢出
if (nums[mid] == target) {
qsxb = mid;
if (mid != 0){ // 找到第一个答案
for (int i=mid-1;i>0;i--){
if (nums[i] != target){
break;
} else {
qsxb = i;
}
}
}
return qsxb+1; // 目标值在中间,返回索引
} else if (nums[mid] < target) {
left = mid + 1; // 目标值在右半区,更新左边界
} else {
right = mid - 1; // 目标值在左半区,更新右边界
}
}
return -1; // 未找到目标值
}
int main() {
int a[100000],n,m;
scanf("%d %d",&n,&m);
for (int i=0;i<n;i++){
scanf("%d",&a[i]);
}
for (int i=0;i<m;i++){
int q;
scanf("%d",&q);
int s;
s = search(n,a,q);
printf("%d ",s);
}
return 0;
}