二分查找的意义
二分查找法主要是解决在“一堆数中找出指定的数”这类问题.
二分查找的条件
- 存储在数组中
- 有序排列
解题思路
二分查找就是将查找的键和子数组的中间键作比较,如果查找的键小于中间键,就在左子数组继续查找;如果大于中间键,就在右子数组中查找,否则中间键就是要找的元素。
核心代码
/**
* 二分查找,找到该值在数组中的下标,否则为-1
* nums:数组
* target:目标值
*/
function binarySearch(nums,target){
int left = 0;
int right = nums.length -1;
while(left <= right){
int mid = (left + right )/2;
if(nums[mid] == key){
return mid;
}else if(nums[mid] < key){
left = mid + 1;
}else {
right = mid -1
}
}
return -1;
}
*** 寻找一个数,最简单的方法*** 利用数组的indexOf()方法
function binarySearch(nums,target){
return nums.indexOf(target)
}
题型演变
- 查找第一个与key相等的元素
- 查找最后一个与key相等的元素
- 查找最后一个等于或小于key的元素
- 查找最后一个小于key的元素
- 查找第一个等于或大于key的元素
- 查找第一个大于key的元素