二分看似简单,但需注意细枝末节

接下来简单探讨几种查询

以严格大于x的第一位数为例子

//序列为m ,x为查询的数 
int find(int x){//假设序列长为n; 
	int l=1,r=n;
	while(l<=r){
		int mid=(l+r)>>1;
		if(m[mid]<=x) l=mid+1;
		else r=mid-1; 
	}//最后出现一定会出现 l==r,此时mid==l 
	// 若m[mid]<=x,则m[mid+1]>x;
	//若m[mid]>x,则 m[l]>x,m[mid-1]<x 
	return m[l];
}

严格大于等于x的情况,只需要去掉等号号即可
严格小于x的情况,将小于符号改为大于符号即可
严格小于等于x的情况,也只需要去掉等号即可

写题过程中还有具体的探讨,可以从这几种方法中迁移应用

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/guiyou/p/17557985.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!