核心
- 循环不变量原则,只有在循环中坚持对区间的定义
确定要查找的区间到底是左闭右开[left, right),还是左闭又闭[left, right],这就是不变量。
方法的基础条件
- 数组是有序数组
边界条件
左闭右闭即[left, right]
- while(left < right) right = middle
左闭右开即[left, right)
- while(left <= right) right = middle - 1
mid = left + (right - left) / 2
代码
1 | function search(arr, target) { |
复杂度
时间复杂度:O(logn)
其中 n 为数组的长度。二分查找所需的时间复杂度为 O(logn)空间复杂度:O(1)
我们只需要常数空间存放若干变量