二分查找
二分查找-I
https://www.nowcoder.com/practice/d3df40bd23594118b57554129cadf47b?tpId=196&tqId=38364&rp=1&ru=/exam/oj&qru=/exam/oj&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26pageSize%3D50%26search%3D%25E4%25BA%258C%25E5%2588%2586%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D196&difficulty=undefined&judgeStatus=undefined&tags=&title=%E4%BA%8C%E5%88%86
使用范围
一个排好序的数组中
用途
用于在有序数组中查找目标元素
优点
减少一次遍历带来的不必要的次数,使得每一查找都能在 更小的区间进行
思想
定义两个指针,一个左指针left,一个右指针right,左指针指向数组的头部,右指针指向数组的尾部,然后还有一个中间指针,初始化为左右指针的平均(mid=(right+(left-right)/2)。
然后进行循环,只有左指针小于右指。中间指针更新为左右指针的平均。循环过程中遇到中间指针的值等于目标值,就返回中间值,如果中间值大于目标值,就更新right=mid-1,如果小于目标值left=mid+1.
int left=0;
int right=nums.length-1;
int mid=left+(right-left)/2;
while(left<=right)
{
mid=left+(right-left)/2;
if(nums[mid]==target){
return mid;
}else if(nums[mid]<target){
left=mid+1;
}else if(nums[mid]>target){
right=mid-1;
}
}
#算法#