以下为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。
注意,该算法需要传入的数组为升序排列的不重复整数数组。如果数组不符合要求,则无法使用该算法进行查找。