简单又不简单的二分法
· 阅读需 5 分钟
二分法的思路比较简单,但往往不容易写对,比如要不要加等号、死循环等问题。实际上,二分法就是一个逐步缩小范围的过程,每次缩小一半。
经典应用
最经典的二分法的应用是:一个有序数组arr(例如升序),数组元素不同,从数组中找数target的索引,如果不存在返回-1。代码比较简单:
int binarySearch(int[] arr, int target) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = left + right >> 1;
if (arr[mid] == target) return mid;
if (arr[mid] > target) right = mid - 1;
else left = mid + 1;
}
return -1;
}

