两种二分查找的区别

!!!

切记 :使用二分前,一定要保证容器有序

!!!

第一种

while(l<r)
{
mid=l+r>>1;
if(a[mid]>=n)
r=mid;
else
l=mid+1;
}

第二种

while(l<r)
{
mid=l+r+1>>1;
if(a[mid]<=n)
l=mid;
else
r=mid-1;
}

测试 

测试一

容器中存在多个需查找的元素

待测容器a[11]={1,2,3,4,4,5,6,7,8,9,10};
查找元素4
第一种输出下标3
第二种输出下标4

 测试二

容器中不存在需查找的元素

待测容器int a[11]={0,1,2,3,4,5,6,7,8,9,10};
查找元素4.5
第一种输出下标5
第二种输出下标4

区别

第一种:

        返回 大于等于 x 的第一个下标

第二种:

        返回 小于等于 x 的最后一个下标

应用

1996. 打乱字母 - AcWing题库

参考文章 : 浅谈两种二分模板 - Frank_Ou - 博客园

posted @   秋天Code  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示