【LeetCode】704.二分查找题干
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
链接:LeetCode704.二分查找
解题思路
二分查找算法即不断的和[m, n-1]区间中间的值进行比较,相等则返回对应的下标i,否则缩小区间,将区间的一端移到 i-1 或 i+1.
注意事项
1.首先要判断target是否在区间内,即target是否小于nums[0]或大于nums[n-1]
2.while循环跳出的条件除了找到了target对应的i之外,区间长度为0也跳出。
代码
int search(int* nums, int numsSize, int target){
int n, i = 0, m = 0;
n = numsSize;
if(target<nums[0] || target>nums[n-1]) return -1;
while(m < n){
i = (n+m)/2;
if(target == nums[i])
return i;
else if(target > nums[i]){
m = i+1;
} else {
n = i-1;
}
}
if(target != nums[n])
return -1;
else
return n;
}