三种模板
数据已按升序排序
-
模板一:
查找条件不与左右元素进行比较
left = 0, right = length - 1; while(left <= right){ mid = left - (right - left) / 2; if(nums[mid] == target){ return mid; } else if(nums[mid] > target){ right = mid - 1; } else { left = mid + 1; } }
-
模板二:
需要访问右邻居
每次查询至少有两个元素left = 0, right = length; while(left < right){ mid = left + (right - left) / 2; if(nums[mid] < target){ left = mid + 1; } else { right = mid; } } //最后再判断left == right
-
模板三
需要访问左右邻居
每次查询至少有三个元素left = 0, right = length - 1; while(left + 1 < right){ mid = left + (right - left) / 2; if(nums[mid] < target){ left = mid; } else { right = mid; } } // 最后判断 left + 1 == right时条件