二分搜索
实现思路
- 从数组的中间元素开始,如果中间元素正好是目标值,则搜索结束
- 如果目标值大于或者小于中间元素,则在大于或小于中间元素的那一半数组中搜索
代码实现
// arr 要有序哦const binarySearch = (arr, target) => { let lo = 0; let hi = arr.length - 1;
while (lo <= hi) { const mid = (lo + hi) >>> 1; const pivot = arr[mid]; if (pivot < target) { lo = mid + 1; } else if (pivot > target) { hi = mid - 1; } else { return mid; } } return -1;};复杂度分析
- 时间复杂度:O(logN),每次比较都缩小一半搜索范围
- 空间复杂度:O(1),只额外存储 3 个变量