二分查找(二分查找算法)
目录
一:题目链接
二:题目思路
三:代码实现
一:题目链接
二:题目思路
首先,当数组有序时, 假如有数组 1 2 3 4 5 6 7 8 ,我们要找的数字是 3 ,除了暴力枚举的情况下,还有一种特别高效方法来解决。
假如我们随便在数组取一个数,如果 当前 的数字小于我们要找的数字 3 ,那么当前的数字 的左边全部数字都是小于 3 的,就可以把 那一边的数字全部排除:
如果 当前 的数字大于我们要找的数字 3 ,那么当前的数字 的右边全部数字都是大于 3 的,就可以把 那一边的数字全部排除:
直到缩小到的区间取到等于 3 的数字时,返回当前下标。这就是二分查找算法。
在此基础上,我们约定每次取的是数组中间的数字。
三:代码实现
int left = 0;int right = nums.length - 1;while(left <= right) {//int mid = (left + right) / 2; 这种写法有溢出风险int mid = left + (right - left) / 2; // 改进if(nums[mid] < target) {left = mid + 1;}else if(nums[mid] > target) {right = mid - 1;}else {return mid;}}return -1;