肝LeetCode的时候没少用到二分法,但是每一次涉及怎么取中间值的时候,总是容易忽略,以至于踩来很多次同一个坑。
二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法。
二分法查找的思路如下:
- 首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。
- 如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤上一步的操作。
说到中间的元素,那很简单嘛,在二分查找中,选取 mid
的方法一般为 mid = (right + left) / 2
。
let mid = (right + left) / 2;
然而,如果 left
和 right
都很大,有的编程语言会有整数溢出的情况(例如 C++,Java),那么可以用 mid = left + (right - left) / 2
代替前者。
let mid = left + (right - left) / 2
对于js er,防止溢出食用以下代码最佳
let mid = left + parseInt((right-left)/2);