704 二分查找
题目描述
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
样例
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
思路
在升序数组 nums中寻找目标值 target,对于特定下标 i,比较 nums[i] 和
target的大小:
如果 nums[i]=target,则下标i 即为要寻找的下标;
如果 nums[i]>target,则 target 只可能在下标 i 的左侧;
如果 nums[i]<target,则 target 只可能在下标 i 的右侧
代码
int binsearch(vector<int>& nums,int target)
{
int left=0,right=nums.size()-1;
while(left<=right)
{
int mid=left+(right-left)/2;//防止left+right过大溢出
if(nums[mid]==target) return mid;
else if(nums[mid]>target) right=mid-1;
else left=mid+1;
}
return -1;//无解时输出-1
}
时间复杂度O(logn)