二分查找的边界问题(゚Д゚≡゚д゚)!?

医学生研究这个真是累……二分查找的思想不困难,但一些边界问题常常令人思路卡顿,
其中while(l < r)ORwhile(l <= r) 以及 r = mid - 1ORr = mid选取哪个两个问题最烦我。
---------------------------------------------(゚Д゚≡゚д゚)!?-----------------------------------------------------------------

  1. 循环边界while(l < r)ORwhile(l <= r)
    这时应该考虑查找到最后,l == r时是否要进行判断。
    如果用while(l < r),那么查找的总区间为[left,right);
    如果用while(l <= r),那么查找的总区间为[left,right];
  2. 分区条件r = mid - 1ORr = mid
    当然l = midORl = mid + 1和它思路相仿,这边仅以右边界分区为例子。
    判断mid的取用或否应当注意mid所指示的解是否可能为唯一解,例如在有重复的元素的有序序列中查找target最左边的位置,那么mid在符合条件后答案也可能在mid的左边,所以r = mid - 1向左收缩边界,就算只有一个目标值left也会由于结束条件是l == r + 1返回第一次找到的数字;
    做个总结,当使用while(l <= r)时为了避免只剩一或两个数时陷入死循环,在后面用 r = mid - 1l = mid + 1避免;
    3.浮点二分查找
    在浮点查找时选用的循环条件是for r - l > 1e-6,代表单次查找精度不会小于1e-6。同时在条件中有精度限制,在使用 l = mid或者 r = mid时能够避免l,r重合导致的死循环,可以直接用;
    -------------------------------------------------(゚Д゚≡゚д゚)---------------------------------------------------------------
posted @ 2026-07-23 18:46  黄昏逃避行  阅读(2)  评论(0)    收藏  举报