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; 取哪个,取决于哪个不会陷入死循环,一般我的处理逻辑就是,用俩个数值,顺着代码来一遍,就知道用哪个了。
(偷图大法好!!!)