“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”
一、题目描述
- 所谓
二分查找就是给定你一个数组,让你用二分查找的方式,找到这个数,这道题依然是面试的高频考题,小伙伴你们会嘛!
二、思路分析
- 首先你要将数组进行
排序(也就是必须是有序的数组才可以进行二分查找),这里可以用我上一篇文章写的快速排序来实现。折半数组,如果中间的数,比我们要查找的数大,则在左侧的折半数组中继续折半查找。- 如果中间的数,比我们要查找的数
小,则在右侧的折半数组中继续折半查找。 - 如果
相等则找到我们要找的数。
- 否则查找失败返回
-1
三、AC 代码:
//查找的是第几个数加一,下标的话不加。
public static int binarySearch(int []nums,int key) {
int max = nums.length - 1;
int min = 0;
int mid = (max + min) / 2;
while (min <= max) {
if (nums[mid] > key) {
//想找的数在左边
max = mid - 1;
} else if (nums[mid] < key) {
min = mid + 1;
} else if (nums[mid] == key) {
key = mid + 1;
}
}
if (min > max) {
return -1;
} else {
return key;
}
}
四、总结:
- 好了,代码撸完,我们
总结一下:- 关键点,首先要
保证数组是有序的 - 细节,要注意
最大值和最小值的判断是小于等于 - 要
注意要求返回的是下标还是第几个数
- 关键点,首先要