二分查找基于二分法。二分法是指:首先,将数据有序排列:先将一个数据集进行有序排列;其次,通过取中间数与所要查找的数进行对比,不断改变左右界限;最后,确定所要的值。
例题:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
解题:
第一步:可以设置左右两边的开始位置,eg:left = 0,right = nums.size()-1。
第二步:选择数组的中间数nums[mid] 与 target 进行对比。
第三步:根据对比结果不断改变左右两边的位置,最终找到target所对应的位置。
代码:
class Solution {
public:
int search(vector<int>& nums, int target) {
int left =0,right= nums.size()-1;
int i;
while (left<=right){
i=left+(right-left)/2;
if(nums[i]==target)
return i;
if(nums[i]<target){
left=i+1;
}
else
right = i-1;
}
return -1;
}
};
注:本代码中的 i 既 mid。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-search
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。