二分法模板

https://cloud.tencent.com/developer/article/1523649

总结:

1)int l_left; int l_right; 的取值在于左右边界是否在结果范围内(例如:数组大小为 5,则选取 0-4;从1-10中取数,则为1-10)

2)循环条件while(l_left < l_right),意味着,跳出循环时,必定是l_left == l_right,此时需不需要后处理(也就是单独判断一下l_left或l_right),取决于题目中,是否给出必定有结果,或者可能无结果,倘若存在无结果则需要判断,否则直接返回l_left;比起while(l_left <= l_right)省心多了。

3)while循环中只存在俩个分支,一个是包含l_mid,一个是不包含l_mid,不对l_mid单独做判断

(偷个图)

备注:也可以反着来。

4)左中位数:l_mid = l_left + (l_right - l_left) / 2;   右中位数: l_mid = l_left + (l_right - l_left + 1) / 2; 取哪个,取决于哪个不会陷入死循环,一般我的处理逻辑就是,用俩个数值,顺着代码来一遍,就知道用哪个了。

(偷图大法好!!!)

原文地址:https://www.cnblogs.com/helloc14/p/12235561.html