题目描述:
给定一个 n
个元素有序的(升序)整型数组 nums
和一个目标值 target
,写一个函数搜索 nums
中的 target
,如果目标值存在返回下标,否则返回 -1
。
思路:先做一个暴力的查找吧,O(n)时间复杂度的。
int search(vector<int>& nums, int target) {
int ans=nums.size();
while(--ans>=0)
if(nums[ans]==target)
break;
return ans;
}
很明显,暴力搜索浪费了一个重要信息:数组是升序的。
二分算法实现:
int search(vector<int>& nums, int target) {
int left=0,right=nums.size(),mid;
while(left<right)
{
mid=(left+right)/2;
//恰好找到
if(nums[mid]==target)
return mid;
//target在mid右边
else if(nums[mid]<target)
{
left=mid+1;
}
//target在mid左边
else
right=mid;
}
return -1;
}
明明时间复杂度降低到了O(logn),测试运行时间竟然没有变少。