leetcode每日一题练习
题目:704 二分法查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
思路
二分法查找是一种针对有序数组进行查找的方法,每次从中间进行切分,判断数组下标为中间的元素是否与目标值匹配,若匹配则输出,若目标值大于中间元素的值,则从后半部分进行划分,若小于则从前半部分进行划分,若查找完依旧不匹配则返回值-1;
- 定义变量 :begin=0,end=numsSize-1,mid;
- 循环条件 :begin<end;
- 判断目标值与中间值大小:targe<nums[mid],targe>nums[mid],targe==nums[mid];
- 根据判断结果进行划分区间 end=mid-1;begin=mid+1;return mid;
5.查无此人:返回-1
具体代码如下:
int search(int* nums, int numsSize, int target){
int end = numsSize - 1;
int begin = 0;
while(begin <= end){
int mid = (begin + end) /2 ;
if (nums[mid] == target){
return mid;
}
if (target > nums[mid]){
begin = mid + 1;
}else if (target < nums[mid]){
end = mid - 1;
}else{
return mid;//只有一个元素的情况
}
}
return -1;
}