check 是用来判断是否满足要求的值(一般要自己写的函数)
不符合条件的check:
注意这个版本的二分得到的是L是不符合check的,并且旁边一位是符合check的位置
一: 查找不符合条件的最小值:
这个版本的二分要求连续的[l,r]区间特性为:
l____k____r *(从l到k为符合check,从k到r不符合check),我们得到的l=k+1也就是说符合条件的最大值为k=l-1(l=k+1变形一下)注意(在k>r的情况下,也就是区间[l,r]都符合check的情况下得到的l为最后一位
二:查找不符合条件的最大值:
这个版本为l____k_____r (l到k为不符合条件,k到r为符合条件) 我们得到的r=k-1也就是k=r+1;
三:符合check版本:
这个版本就是得到的l 就是符合check并且旁边就是不符合的的下标
查找符合条件的最大值
L_____K_____R (L到k为符合check,k到R为不符合check)
即L==K 注意(当所有区间都是不符合check的时候我们得到的L将会是区间的第一位是不符合条件的特殊情况需要特判一下)
查找符合条件的最小值:
L____K_____R (L到K为不符合条件,K到R为符合条件)即得到为R==K;
浮点二分法: