以下为ChatGPT自动生成的解答,正确与否请自行判断。

BFE.devAI解答 - JavaScript 代码题
37. 手写Binary Search (unique)

function binarySearch(arr, val) {
  let start = 0;
  let end = arr.length - 1;
  
  while (start <= end) {
    const mid = Math.floor((start + end) / 2);
    if (arr[mid] === val) {
      return mid;
    } else if (arr[mid] < val) {
      start = mid + 1;
    } else {
      end = mid - 1;
    }
  }
  return -1;
}

这是一个基本的二分查找算法,其中arr代表要查找的数组,val代表要查找的值。函数返回值为找到的元素的索引,未找到时返回-1。

算法思路如下:

  • 设置起始点start为数组的第一个元素的索引,设置结束点end为数组的最后一个元素的索引
  • 在循环内部,计算中间点的索引mid,通过比较中间点的值和要查找的值来决定下一步走向。如果中间点的值等于要查找的值,则找到,返回中间点的索引。如果中间点的值小于要查找的值,则向右查找,将起始点start设为mid+1。反之,将结束点end设为mid-1
  • 如果没有找到目标元素,返回-1。

注意,该算法需要传入的数组为升序排列的不重复整数数组。如果数组不符合要求,则无法使用该算法进行查找。