红蓝边界思想 : 蓝左\红右
int bsearch()
{
int l = -1 , r = N;
while(l + 1 != r)
{
int mid = l + r >> 1;
if(isBlue(mid)) l = mid;
else r = mid;
}
return r or l;
/**
* 有三种可能 : 1. l = -1 全红 return r;
* 2. r = N 全蓝 return l;
* 3. l 和 r 位于红蓝边界
**/
}
以该数组为例:
cpp
int a[N] = {1,3,5,5,5,6,8,9};
对于情况 3 我们从以下几个判断条件入手,分析isBlud
函数