题目
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
解题思路
解题思路很明确,就是二分法,而二分法主要有两点:一是区间的划分;二是边界条件的判断。对于区间的划分,为了避免出错,可划分为大于目标值的区间,小于目标值的区间以及等于目标值的情况。对于边界条件的判断,有两种,一是在while循环内,判断完,即取start<=end,二是取start<end,在return时,需要进行条件判断。本文采用了后者。至此解题思路阐述完毕。
代码
class Solution {
public:
int search(vector<int>& nums, int target) {
int start = 0, end = nums.size()-1;
int mid = start+(end-start)/2;
while(start<end){
if(nums[mid]>target) end = mid-1;
else if(nums[mid]<target) start = mid+1;
else return mid;
mid = start+(end-start)/2;
}
return nums[start]==target? start:-1;
}
};