1.题目
题目描述
给一个长度为n的单调递增的正整数数列,寻找一个数x,问x的第一次出现的位置是多少?
输入
第一行一个数n,表示有n个数;
接下来有n个数,表示这个序列;
第三行指定一个数x。
输出
输出x的位置
输入示例
10
4 6 7 8 8 9 9 9 11 15
9
输出示例
6
其他说明
0<n<10^6
2.解析
这道题很明显是道二分查找题,(没看出来的,我觉得你的智商还是去玩超级玛丽吧)。这道题直接考的二分查找,其他的啥也没考,所以想知道这道题这么做请看我的另一篇随笔(二分查找点击跳转)。
但代码还是要上的:
3.代码
#include<bits/stdc++.h> using namespace std; int a[1000001],n,x; int main() { scanf("%d",&n); //输入,不解释 for(int i=1;i<=n;i++) scanf("%d",&a[i]); scanf("%d",&x); int l=1,r=n,mid;//l是第一个数,r是第最后的数,mid是中间的数 while(l<=r) { mid=(l+r)/2;//求出mid if(a[mid]<x) l=mid+1;//三种情况 if(a[mid]>x) r=mid-1; if(a[mid]==x) break; } while(a[mid-1]==x) mid--; printf("%d",mid);//输出,不解释 return 0; }