二分法-浅析
二分法
解题步骤
1.确定左右边界的范围,明确应在什么范围内进行查找是例如一个数组长为n,范围应该是[0,n]还是[0,n-1]
2.选择中间元素和什么值进行比较,
3.然后选择是左中位数还是右中位数
1 | if(对中位数的判断条件) |
上面这种就是右边界收缩,因为right=mid-1,left=mid那么我们就必须要选择右中位数
1 | if(对中位数的判断条件) |
这种则是左边界收缩,我们就必须选择左中位数
4.最后我们考虑是否要进行left 后处理以获得最终结果
注意:
1.mid的取值有3种取法(以左中位数取为例)
1)mid=(left+right)/2 //右中位数mid=(left+right+1)/2
最普通的一种取法,不建议大家用,很有可能会造成int溢出
2)mid=left+(right-left)/2 //右中位数mid=left+(right-left+1)/2
一般用这种做法不会造成溢出,但若数据很大的时候也会造成溢出
3)mid=(left+right)>>1; //右中位数mid=(left+right+1)>>1
推荐用这种写法,这种不会造成溢出