1、二分搜索法

二分搜索法

易混点:

1.left是小于right还是小于等于right
2.更新的时候是更新到mildle还是midle-1
3.区间是 [left,right] 还是 [left,right),对区间的定义不同会影响到边界的处理

左闭右闭写法

伪代码

left = 0;
right = numsize - 1;
while(left <= right)//思考在区间里,left和right能取到相等吗?如[1,1] = 1,而[1,1)就是一个不合法区间,即他不能取到1,但又能取到1
{
	mildle = (left + right)/2;
	if(nums[midle] > target)
		right = midle - 1;//因为已经判断为target在[left,midle]里面,
		//为了防止后面的循环继续判断midle是否为target,所以更新为midle-1
		//就把midle卡到接下来搜索的区间的外面了
	else if(nums[midle] < target)
		left = midle + 1;
	else
		return midle;
}
return -1;

左闭右开写法

伪代码

left = 0;
right = numsize - 1;
while(left < right)//思考在区间里,left和right能取到相等吗?如[1,1] = 1,而[1,1)就是一个不合法区间,即他不能取到1,但又能取到1
{
	mildle = (left + right)/2;
	if(nums[midle] > target)
		right = midle;//因为已经判断为midle不和target一样,即target在[left,midle)里
		//面,因为这个循环的写法是基于[left,right),搜索本来就不会包含right
		//所以即可让right=midle,继续迭代循环下去
	else if(nums[midle] < target)
		left = midle + 1;
	else
		return midle;
}
return -1;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值