尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【算法与数据结构】二分法及其应用

【算法与数据结构】二分法及其应用
📅 发布时间:2026/7/10 15:26:53

二分法及其应用

文章目录

      • 二分法及其应用
    • @[toc]
        • 1.二分法
        • 2.二分法的应用
          • (1)在一个有序数组中,找到某个数,没有返回False
          • (2)在一个有序数组中,找到≥某个数最左侧的位置
          • (3)局部最小值问题(无序数组二分)

1.二分法

二分法适核心逻辑是不断取中间值缩小搜索范围,时间复杂度O ( log ⁡ n ) O(\log n)O(logn),远优于遍历算法复杂度O ( n ) O(n)O(n)。


2.二分法的应用
(1)在一个有序数组中,找到某个数,没有返回False

思路:

升序数组,左边界left、右边界right,取中点mid比较:

  • arr[mid] == target:找到,返回mid;
  • arr[mid] < target:目标在右半区,left = mid + 1;
  • arr[mid] > target:目标在左半区,right = mid - 1;
  • 循环结束未命中则不存在,返回False。
defbinary_search(mylist,target):left=0right=len(mylist)-1whileleft<=right:mid=left+(right-left)//2ifmylist[mid]==target:returnmidelifmylist[mid]<target:left=mid+1else:right=mid-1returnFalseprint(binary_search([1,2,3,3,3,5,8],2))# 结果:1

这是一个普通二分,找到相等就跑路,只求 “有没有”。

(2)在一个有序数组中,找到≥某个数最左侧的位置

思路:

  • arr[mid] >= target:记录当前位置,向左搜,right = mid - 1;
  • arr[mid] < target:向右搜,left = mid + 1;
  • 若全部小于 target,返回数组长度。
deffindleftnumber(mylist,target):ans,left,right=len(mylist),0,len(mylist)-1whileleft<=right:mid=left+(right-left)//2ifmylist[mid]>=target:ans=mid right=ans-1else:left=left+1returnansprint(findleftnumber([1,2,3,3,3,5,8],2))# 结果:1print(findleftnumber([1,2,3,3,3,5,8],100))# 结果:7(没找到就会返回初始化时候标定的mylist的长度)

这是一个左边界二分,相当于满足条件的先记下来,继续往左找,只求最左边那一个。

(3)局部最小值问题(无序数组二分)

问题描述:

给定数组,相邻元素不相等,定义局部最小:

  1. 若arr[0] < arr[1]:0 号位置是局部最小;

  2. 若arr[n-1] < arr[n-2]:末尾是局部最小;

  3. 中间位置i ii满足arr[i]<arr[i-1] and arr[i]<arr[i+1]:i ii为局部最小。

    要求:在O ( log ⁡ n ) O(\log n)O(logn)时间找出任意一个局部最小值下标。

deffindlocalmin(mylist):left,right=0,len(mylist)-1ifmylist[0]<mylist[1]:return0ifmylist[len(mylist)-2]>mylist[len(mylist)-1]:returnlen(mylist)-1whileleft<=right:mid=left+(right-right)//2ifmylist[mid]<mylist[mid+1]andmylist[mid]<mylist[mid-1]:returnmidelifmylist[mid]>mylist[mid+1]:left=mid+1elifmylist[mid]<mylist[mid-1]:right=mid-1returnFalseprint(findlocalmin([4,2,3,4,5,4.3,8]))# 结果:1

相关新闻

  • 致远协同管理软件,覆盖政企全场景的一体化 OA 协同办公平台
  • 2026长沙翡翠臻品合规回收实测:六区两市一县全域服务网络与透明变现权威指南 - 分享测评官
  • 3个简单步骤:如何在Windows电脑上直接安装APK文件

最新新闻

  • 前端小白看过来:收藏这3步,30天轻松入门AI开发!
  • 爱彼万国名表高价变现:北京合扬深耕奢品回收头部阵营,让闲置腕表焕发新生 - 奢侈品交易观察员
  • 手持式雷达测速仪:不限道路厂区,可设置限速阈值实时监测车辆速度
  • 创客匠人:知识付费进入“工具、服务、AI”三重体系时代
  • 南宁人别亏!腋下热门包回收价差上千?逸程正规统一行情报价,绝不到手压价 - 全城热点
  • 2026年亚马逊跨境电商侵权链接申诉服务商推荐与专业选型分析报告 - 行业观察网

日新闻

  • OpenClaw本地化部署:xParse文档解析引擎实战指南
  • 蓝牙 5.4 协议栈深度解析:从 HCI 到 L2CAP 的 7 层数据流
  • PyTorch nn.CrossEntropyLoss 实战:3种权重设置与标签平滑对比(附代码)

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号