算法
搜索

二分查找

二分查找是最基础的查找算法,它的时间复杂度为 O(logn)。虽然二分查找的思想简单直白,但是写二分查找的时候在处理边界条件的时候会写错。这里给出一种处理边界条件的时候不容易写错的二分查找模板。参考视频讲解 (opens in a new tab)

function search(nums: number[], target: number): number {
  function binarySearch(l: number, r: number): number {
    while (l + 1 !== r) {
      const mid = Math.floor((l + r) / 2);
      const tmp = nums[mid];
      if (tmp > target) {
        r = mid;
      } else if (tmp < target) {
        l = mid;
      } else {
        return mid;
      }
    }
    return -1;
  }
  // 这里必须是 -1 和 nums.length
  return binarySearch(-1, nums.length);
}