大连网站开发培训,车陂手机网站建设电话,腾讯云做的网站会被拦截么,河北百度推广思路#xff1a;这是最典型和基础的二分查找题#xff0c;因为符合单调性和有界性#xff0c;如果直接暴力查找的话#xff0c;会超时#xff0c;只需要用一下二分即可
左边界为#xff1a;0#xff08;因为编号最小为1#xff09;
右边界为#xff1a;n1#xff0…
思路这是最典型和基础的二分查找题因为符合单调性和有界性如果直接暴力查找的话会超时只需要用一下二分即可
左边界为0因为编号最小为1
右边界为n1因为编号最大为n
又因为要找的是第一次出现的编号所以等于时右边界是要往左缩的
所以 为一类 为一类
接下来套二分模板即可
int arr[1000005];
int n, m, num;
int func(int* arr, int num)
{int l 0, r n 1; //左边界和右边界while (l 1 r) {int mid (l r) / 2; //二分if (arr[mid]num) //如果该编号对应的值比查找的小{l mid; //左边界提高}else //如果该编号对应的值比查找的大或者相等{r mid; //右边界降低}}if (arr[r] num) //如果等于查找的数{return r; //返回编号}else //没有该数{return -1;}}
int main()
{scanf(%d%d, n, m);for (int i 1; i n; i){scanf(%d, arr[i]);}for (int i 1; i m; i){scanf(%d, num);printf(%d , func(arr, num));}return 0;
}