CC实例二分法查找目标元素

对于元素的查找使我们在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

以上就是本次为大家分享的内容!

希望大家喜欢。送人玫瑰,手有余香,期待您的点赞


转载请注明:http://www.aierlanlan.com/rzgz/3583.html

  • 上一篇文章:
  •   
  • 下一篇文章: