704. 二分查找
这道题目很简单,直接使用分治法就可以求解。
- 令
left=0
,right=nums.size()
。每一次目标值都与处于中间位置的元素进行比较,由于数组nums
是升序排列的。 - 若
target
大于nums[mid]
,那么target
出现的位置只可能在mid
的右边,此时令left=mid+1
。 - 同理,若
target
小于nums[mid]
,则令right=mid-1
。 - 否则,
target
等于nums[mid]
,此时return 0
。 - 如果上述4没有返回0,那么需要返回-1。
代码实现
class Solution {
public:
int search(vector<int>& nums, int target)
{
int left=0,right=nums.size()-1;
while(left<=right)
{
int mid=(right-left)/2+left;//其实直接(left+right)/2就可以,这么写是为了防止溢出
if(target>nums[mid])left=mid+1;
else if(target<nums[mid])right=mid-1;
else return mid;
}
return -1;
}
};