2025寒假备战蓝桥杯02---朴素二分查找升级版本的学习+分别求解左右端点 ...

打印 上一主题 下一主题

主题 1047|帖子 1047|积分 3141

1.朴素二分查找的升级版

和之前先容的这个二分查找相比,我觉得这个区别就是我们的这个二分查找须要找到的是一个区间,而不是这个区间里面的某一个元素的位置;

2.查找左端点

1)起首就是我们的这个循环的条件:left<right;
2)其次就是我们的判断的这个语句:
x<t,这个t就是我们的target目标值;这个时候和我们的朴素二分一样,就是让这个left=mid+1;
但是当这个x>=t的时候,我们不再是让这个right=mid-1了,而是让这个right=mid,因为这个时候是判断的区间,以是这个mid大概就是我们想要的这个数值;;
3)之前我们确定这个mid的时候是这个+1或者是不+1都是可以的,因为当是偶数的时候,两个环境下对应的这个数值都失败可以资助我们判断的;
但是在这个里面,我们的终点求解的时候,就应该是这个不加1的版本才可以;

3.查找右端点

1)这个和上面的恰好是反过来的,无论是这个终点的求解,还是这个判断和位置的变换,都是和上面的放过来;
上面的取等号的,我们下面的查找右端点就不用取等号,反之,假如上面没取,我们这个就须要进行相称环境下的判断;
2)其次就是这个里面的终点元素的判断:
left+(right-left+1)/2和上面的也是不同的,上面的是不要+1的;

4.代码的编写

1)起首界说一个数组,里面的两个元素都是-1,这个处置惩罚的就是我们的这个示例里面的第三种环境;
2)下面就是分别去查找我们的左端点和右端点,按照上面先容的这个思路即可;
3)左端点:
left<right作为循环的条件;
mid求解的时候不须要+1的操纵;
x<target对应的就是我们的left=mid+1;
x>=target对应的就是我们的mid=right;
return的时候其实这个left和right指向的就是一个位置,因此当我们往数组里面搁置的时候,left和right都是可以的;

4)下面的这个是右端点的判断的逻辑代码:
left<right作为我们的判断的条件;
mid求解的时候须要加上1;
x<=target对应的这个left=mid;
x>target的时候,right=mid减去一;
这个找到端点之后,直接把这个下标放到我们的ret数组里面的第二个元素的位置即可;


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我可以不吃啊

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表