如果mid位置是目标值,就标记继续往左找的代码为什么是错的?
查看原帖
如果mid位置是目标值,就标记继续往左找的代码为什么是错的?
785592
holmeboo楼主2023/12/1 16:14

代码如下: 大佬帮忙看看~~

//P2249 【深基13.例1】查找
#include <bits/stdc++.h>
using namespace std;
const int N = 1E5+5;
int n,m,a[N];
int binary_search(int x){
	int p=-1,l=1,r=n;//p记录位置
	while(l<=r){
		int mid = l+(r-l)/2;
		if(a[mid] == x) p=mid,r=mid-1;//找到目标值,暂时标记这个位置,继续往左边搜
		else if(a[mid]<x) l=mid+1;//中间值太小,往右边搜
		else r=mid-1;//中间值太大,往左边搜
	}
	return p;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i];
	//二分
	while(m--){
		int x;
		cin>>x;
		cout<<binary_search(x)<<" ";
	}
	return 0;
}
2023/12/1 16:14
加载中...