您的位置:首页 > 其它

【二分查找】查找数组中第一个比k大的数的下标

2015-01-06 20:04 267 查看
题目:EPI

提示:当left和right都是非负数时,使用 mid = left + (right - left) / 2;这种形式可以避免溢出。

当left和right一个为负另一个为非负时,用mid = (left + right) / 2;这种形式可以避免溢出。



int search_first_larger_k(int* arr, int length, int k)
{
	if (arr == nullptr || length <= 0 || arr[length - 1] <= k)
		return -1;
	int res = length - 1,left=0,right=length-1;
	while (left <= right)//不需要加判断条件 && right>=0 && left<length 
	{
		//int mid = (left + right) / 2;   这种方法会溢出!!!!
		int mid = left + (right - left) / 2;
		if (arr[mid] > k)
		{
			res = mid;
			right = mid - 1;
		}
		else// if (arr[mid] <= k)
			left = mid + 1;
	}
	return res;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐