在有序数组中二分查找目标值,并支持查找插入位置(lower_bound)。

思想:每次取中点,比较后丢弃一半区间,直到命中或区间为空。

function binarySearch(nums, target) {
  let lo = 0, hi = nums.length - 1
  while (lo <= hi) {
    const mid = (lo + hi) >> 1
    if (nums[mid] === target) return mid
    else if (nums[mid] < target) lo = mid + 1
    else hi = mid - 1
  }
  return -1
}

// 查找第一个 ≥ target 的位置(插入位置)
function lowerBound(nums, target) {
  let lo = 0, hi = nums.length
  while (lo < hi) {
    const mid = (lo + hi) >> 1
    if (nums[mid] < target) lo = mid + 1
    else hi = mid
  }
  return lo
}

同分类其他题目