阳了这么多天终于好了
今天继续写日记。
二分
如果一组数,存在某种条件能把这组数一分为二,使得这个数组下标中点以左的数(不)满足该条件以右的数不满足该条件,那么此时就可以用二分处理。
如此题,若给定数组
1 2 2 3 3 4
3起始与角标3终止于4,并且mid=2.5=2
因此答案应在mid+1,r中(闭区间)
给定x为任意元素
若mid所对应数>=x则答案在l到mid中此时只需令r=mid反之只需调整l令l=mid+1最后所剩的单元肯定是x(前提x存在于数组中)。另外,这样找到的x是从左向右找的。
若从右向左找,只需让条件变为mid对应的数<=x这样,应令l=mid值得一提的是,这里的mid=r+l+1/2原因是由于整型变量整除是向下取值,所以,若l恰好等于r-1,则mi
无论是快排,归并,还是二分,本质上都是把数组分成一个单元。因此在循环时,条件都是l<r
因此角标
再来说说浮点二分,浮点二分不存在边界问题,因为他不会像整型变量那样作商时向下取整,因而简单很多
经验告诉我,若我要保留六位小数,就让循环的条件卡在1e-6,若保留八位,就1e-10