查找一个数是否存在 二分

大家好,今天给大家带来一道特别简单的二分题。先看描述:

描述

请在一个有序递增数组中(不存在相同元素),找出值 x 的位置,如果 x 在数组中不存在,请输出 -1 !

输入描述

第一行,一个整数 n ,代表数组元素个数(n≤5×106)
第二行,n 个数,代表数组的 n 个递增元素(1≤数组元素值≤108)
第三行,一个整数 x ,代表要查找的数(0≤x≤108)

输出描述

x 在数组中的位置,或者 -1。

这道题特别的简单,所以直接上代码:

#include<bits/stdc++.h>
using namespace std;
int a[5000001];//存储有序递增序列
int main(){
	int n,m;//n:序列数字个数 m:查找的数字
	//cin>>n
	scanf("%d",&n);
	for(int i=1;i<=n;i++){//下标1~n
		//cin>>a[i];
		scanf("%d",&a[i]);
	}
	//cin>>m;
	scanf("%d",&m);
	int l=1,r=n;//l指向下标1 r指向下标n
	while(l<=r){//二分查找
		int mid=(l+r)/2;//取中间下标
		if(a[mid]==m){//中间值等于查找数字
			//cout<<mid;//输出下标
			printf("%d",mid);
			return 0;//结束程序
		}else if(a[mid]>m){//中间数字大于查找数字
			r=mid-1;//在序列的左边查找
		}else{//中间数字小于查找数字
			l=mid+1;//在序列的右边查找
		}
	}
	cout<<-1;//没有查找到数字,输出-1
	return 0;
}

最后,这道题在千千蓝鲸

关注我,统统都是干货

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值