二分查找第一个比k大的数

在这里我们可以直接二分,或者更方便的我们有一个函数 lower_bound(a,a+num,val);

1.直接二分的方法

int binary(int val,int a[],int l,int r)
{
	int m;
	int id;
	while(l<=r)
	{
		m=l+(r-l)/2;               //避免溢出
		if(a[m]>val)
		{
			id=m;
			r=m-1;	
		}
		else
			l=m+1;
		
	}
	return id;
}

2.STL找的第一个大于k 的下标,注意函数返回的是位置。

	int a[100]={1,5,3,9,8};
	int *x=lower_bound(a,a+5,7);
	cout<


你可能感兴趣的:(算法基础l78z)