二分查找重点概括

二分查找重点概括
https://leetcode-cn.com/problems/search-insert-position/solution/te-bie-hao-yong-de-er-fen-cha-fa-fa-mo-ban-python-/

写成 while(left < right) ,退出循环的时候有 left == right 成立,好处是:不用判断应该返回 left 还是 right;

区间 [left..right] 划分只有以下两种情况:

  1. 分成 [left..mid] 和 [mid + 1..right],分别对应 right = mid 和 left = mid + 1;(下取整
  2. 分成 [left..mid - 1] 和 [mid..right],分别对应 right = mid - 1 和 left = mid,这种情况下。需要将 int mid = (left + right) / 2 改成 int mid = (left + right + 1) / 2 (上取整),否则会出现死循环,这一点不用记,出现死循环的时候,把 left 和 right 的值打印出来看一下就很清楚了;

退出循环 left == right,如果可以确定区间 [left..right] 一定有解,直接返回 left 就可以,否则还需要对 left 这个位置单独做一次判断;

始终保持不变的是:在闭区间 [left..right] 里查找目标元素

posted @ 2022-05-03 21:10  麦克斯的园丁  阅读(50)  评论(0编辑  收藏  举报