二分查找_优选算法(C++)二分查找算法
网页直达:
https://leetcode.cn/problems/binary-search
题目解析:
1.今天来学习一个新算法-----二分查找.
2.这里题目就是查找数据,暴力解法就是遍历数组,返回下标,但是暴力解法效率慢,主要原因是每一次遍历只能排除一个数据,所以我们的优化思路就是一次减少多个数据,从而引出我们的二分查找算法.
3.我们发现一个有序的数组,我们要查找target从中间找,mid两边就可以大致看出target在两边中的哪一边,我们就可以排除二分之一的区间,我们称之为具有"二段性",但是值得注意的是:其实不一定是有序的才可以使用二分查找,只要满足一定的规律就可以使用二分查找.
代码实现:
这里的二分查找比较简单,就不再赘述.
值得注意的是mid的计算方式mid=(right+left)/2在int的范围内可能溢出,所以我们使用的是int mid = left + (right - left) / 2计算;
class Solution {
public:int search(vector<int>& nums, int target) {int left=0,right=nums.size()-1;int mid=right/2;while(right>=left){int mid = left + (right - left) / 2; // mid计算方式,避免溢出if(target<nums[mid]){right=mid-1;}else if(target>nums[mid]){left=mid+1;}else{return mid;}}return -1;}
};
总结朴素二分模板:
int mid = left + (right - left) / 2; // mid计算方式,避免溢出
if(.......)
{right=mid-1;
}else if(........)
}left=mid+1;
}else
{return ....;
}