题目:
给定一个 n
个元素有序的(升序)整型数组 nums
和一个目标值 target
,写一个函数搜索 nums
中的 target
,如果目标值存在返回下标,否则返回 -1
。
示例 1:
输入:nums
= [-1,0,3,5,9,12],target
= 9 输出: 4
使用二分查找的主要目的是为了提高运行效率,简化运算过程
实现二分查找有四个步骤:
一、定义middle、left、right 分别是所取数组范围的最中间、最左边、最右边的下标;
二、比较目标值target 与范围中间的那个数 nums[middle]的大小,如果target更大,锁定middle右边的数组元素,如果target更小则锁定middle下标左边的元素,这样就实现了把范围缩小一半,即二分法;
三、改变left 或 right 的值,注意更新middle的值 ,middle是指所选范围内的中间的那个数的下标,所以应为(left+right)/2;
四、通过循环while(left<=right)不断更新 middle,left,right的值,最终找到指向和target相等的数的下标,若没有,则跳出循环return -1;
具体步骤请看以下代码:
class Solution {
public:
int search(vector<int>& nums, int target) {
int n,i;
n=nums.size();
int middle=n/2;
int left=0;
int right=n-1;
while(left<=right){
middle=(left+right)/2;
if(nums[middle]<target){
left=middle+1;
}else if(nums[middle]>target){
right=middle-1;
}else{
return middle;
}
}
return -1;
}
};