二分查找(思路+实现细节+动画演示,看不懂直接喷)
二分查找思路+代码实现+动画演示,绝对详细!
·
题目
①二分查找(条件+思路)
条件:
被查找的序列是有序的。(升序、降序),而本题是升序的
大致思路:
用 left 、 right 两个游标指针维护整个序列。折中查找,折中的位置 (left+right)/2,
记作mid。比较nums[mid]与target的大小关系(三种关系:大于,小于,等于),等于时return mid。
详细思路的分析:
分析大于和小于。(等于的情况在上面说了,直接return,注意题目要求返回下标)
前面提过,是使用left和right游标维护整个序列,所以变动的是left和right游标!
只有三个变量,所以是分析left,mid,right。
1、小于时:
nums[mid]<target。说明left与right折中的结果太小了,应该让left所代表的值变大,
因为nums序列是升序,所以left要在mid的位置上右移。(如果是降序,就是right在mid位置左移)
结果就是:
left = mid+1;//nums升序
2、大于时:
分析情况也同理就不赘述,给出结论
nums序列升序,
right = mid-1;//nums//升序1
动画简单演示:
二分查找
②代码展示(C++11版本)
class Solution {
public:
int search(vector<int>& nums, int target)
{
int left = 0;
int right = nums.size()-1;
while(left<=right){
int mid = (left+right)/2;
if(nums[mid]<target){
left = mid+1;
}
else if(nums[mid]>target){
right = mid-1;
}
else{
return mid;
}
}
return -1;
}
};
更多推荐
已为社区贡献1条内容
所有评论(0)