题目特点:
二分查找的题目前提条件一定是有序、无重复数组,这两个条件也可作为此类题目的关键词,题目出现此类意思,可考虑二分查找。
解析二分查找算法:
二分查找就是不断将搜索区间减半的搜索方法,算法的实现内容其实也就两块:搜索区间的调整(通过调整left或right)、目标值的判断。
其中搜索区间的写法实际上也影响着搜索区间的调整方法:
1.若搜索区间为[left,right],则while判断条件就应为(left<=right),更新后的区间就应该为right=middle-1。
2.若搜索区间为[left,right),则while判断条件就应为(left<right),更新后的区间就应该为right=middle。
推荐第一种写法,比较符合常规思路,不易出现错误。
LeetCode练习跳转:. - 力扣(LeetCode)
参考代码:
class Solution {
public:
int search(vector<int>& nums, int target)
{
int left = 0;
int right =nums.size()-1;
int middle;
while(left <= right)
{
middle =(right+left)/2;
if(target==nums[middle])
{
cout<<middle<<endl;
return middle;
}
else
{
if(target>nums[middle])
left= middle + 1;
else
right = middle -1;
}
}
cout<<-1<<endl;
return -1;
}
};