Skip to content

Binary

经典实现

function binaryFind(target, nums) {
  let start = 0
  let end = nums.length - 1
  while(start <= end) {
    const mid = Math.ceil((start + end) / 2)
    if(nums[mid] == target) {
      return mid
    } else if(nums[mid] > target) {
      end = mid - 1
    } else {
      start = mid + 1
    }
  }
  return -1
}

注意的点

//下面两种都可以
const mid = Math.ceil((start + end) / 2)
const mid = Math.floor((start + end) / 2)

//!!!一定要带上等于号
start <= end

//记得+1或者-1
start = mid + 1
end = mid - 1

//记得返回-1
return -1

计算排序数组的中间值

不管 arr 的长度是奇数还是偶数,都可以使用这个公式来计算中间值。举个例子:

function average(arr: number[]) {
  const m = arr.length
  return (arr[Math.floor(m / 2)] + arr[Math.floor((m - 1) / 2)]) / 2
}

console.log(average([1, 2, 3, 4])) //=> 2.5
console.log(average([1, 2, 3])) //=> 2

Released under the MIT License.