题目描述:给定一个 n
个元素有序的(升序)整型数组 nums
和一个目标值 target
,写一个函数搜索 nums
中的 target
,如果目标值存在返回下标,否则返回 -1
。
使用二分法前提:数组为有序序列,且元素中无重复元素。
写二分法的时候也需要注意,选取区间开闭的问题。即,[left , right] 和[left , right )两种。
以左闭右开为例,在这种情况使用while循环的时候需要注意while中的条件应该为(left<right),因为这种情况下,left = right 是没有意义的,所以不能带等号。
代码以左闭右开为例
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0;
int right = nums.size();
while(left < right)
{
int middle = left+(right-left)/2;
if(nums[middle]>target)
{
right = middle;
}
else if(nums[middle]<target)
{
left = middle+1;
}
else
{
return middle;
}
}
return -1;
}
};