问题的关键在于找到合适的方向,以及《=,《等之间的区别,此外,本方法使用于连续区间中寻找合适答案的模型,需要str,end循环和chack函数辨别是否成立。共两部分。
找到答案的二分查找
图示为找对应答案的最高位置
using gg=long long; gg chack1(gg str, gg end) { gg f = 0; for (; str <= end;) { gg min = (str + end) / 2; if (a[min]<=c) { str = min + 1; f = min; } else end = min - 1; } if (a[f] != c)return 0; return f; }
|
以下为找对应答案的最低位置
gg chack2(gg str,gg end) { gg f = 0; for (; str <= end;) { gg min = (str + end) / 2; if (a[min]>=c) { end = min - 1; f = min; } else str= min+1; } if (a[f] != c)return 0; return f; }
|
找最适位置
gg mory(gg str,gg end) { for (; str < end-1;) { gg min = (str + end) / 2; if (a[min]>=c) end = min; else str= min; } if (chack(end))return end; else return str; }
|
其中chack表示对min检查是否正确,适用于找最适而非判别
也可用于小数类型的二分数据。
一般str值为1
若为0,会出现0+0=0,0/2=0,?/0=re的事情