对于元素的查找使我们在C/C++编程中经常遇到的问题,查找方法多种多样,二分法查找是其中较为常见的查找方法,该查找方法在有序链表或数组中经常用到,在顺序列表或者数组中查询速度较快。今天就专门针对二分法进行讲解:
实例:给定一个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的第一个出现的target,如果目标值存在返回下标,否则返回-1;
C/C++算法从菜鸟到达人京东好评率98%无理由退换京东配送官方店旗舰店¥84.9购买代码主体部分如下:
classSolution{
public:
/**
*代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*如果目标值存在返回下标,否则返回-1
*
paramnumsint整型vector*
paramtargetint整型*
returnint整型*/
intsearch(vectorintnums,inttarget){
//writecodehere
inthigh=nums.size()-1;//定义整型变量high,从最后一个元素开始
intlow=0;
intmid=0;
while(low=high)
{
mid=low+(high-low)/2;//在low=high的时候查询下表为mid的元素是否就是要查找的目标元素,如果不是,继续往前查找,如果是,则返回对应元素的下标。
if(nums[mid]==target)
inti;
for(i=0;i=mid;i++)
{
if(nums[mid]!=nums[mid-i])
{
returnmid-i+1;
}
}
returnmid-i+1;
}
elseif(nums[mid]target)
low=mid+1;
else
high=mid-1;
}
return-1;
};
代码设计思路:设置三个变量(lowmaxhigh),并初始化inthigh=nums.size()-1low=mid=0;mid=low+(high-low)/2;
二分法查找然后用被查找的对象数和mid去比较,
如果大于mid,则表示对象数在mid的右侧,此时更新查找范围,把min变为mid+1(此处用数组下标说明)如果小于mid,则表示对象数在mid的左侧,此时更新查找范围,把max变为mid-1(此处用数组下标说明)需要注意的是要找到有序数组中第一个匹配的下标,所以这里应该是要在min~mid之间。如果查找不到,则直接返回-1
以上就是本次为大家分享的内容!
希望大家喜欢。送人玫瑰,手有余香,期待您的点赞