二分算法,80分TLE求助
查看原帖
二分算法,80分TLE求助
1293674
WilliamYuanBao楼主2024/7/14 13:24

我用的二分算法,但是TLE了最后一个点。请各位dalaodalao帮我看看哪里错了吧(用的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;
}
2024/7/14 13:24
加载中...