704. 二分查找

双指针

每次都只需要检查中间值是否符合要求,检查完还没有的话说明不存在

function search(nums: number[], target: number): number {
  let left = 0
  let right = nums.length - 1

  // 每次都检查 mid 的值
  // 存在 left === right 的情况,也需要检查
  // 当 left > right 的时候就检查完了
  while (left <= right) {
    const mid = Math.floor((left + right) / 2)
    const midValue = nums[mid]

    if (midValue === target) {
      return mid
    } else if (midValue < target) {
      // mid 更小,说明在右侧,调整 left
      // 因为 mid 所在的位置检查过了,所以左区间调整为 mid + 1
      left = mid + 1
    } else {
      // mid 更大,说明在左侧,调整 right
      // 因为 mid 所在的位置检查过了,所以右区间调整为 mid - 1
      right = mid - 1
    }
  }

  return -1
}