蓝桥杯算法精讲:二分查找实战与变种解析

news/2025/3/26 5:11:14/

适合人群:蓝桥杯备考生 | 算法竞赛入门者 | 二分查找进阶学习者

目录

一、二分查找核心要点

1. 算法思想

2. 适用条件

3. 算法模板

二、蓝桥杯真题实战

例题:分巧克力(蓝桥杯2017省赛)

三、二分查找变种与技巧

1. 查找左边界

2. 查找右边界

四、常见错误与注意事项

五、蓝桥杯进阶练习题


一、二分查找核心要点

1. 算法思想

二分查找(Binary Search)是一种在有序序列中快速定位目标的算法,通过不断缩小搜索范围,将时间复杂度从O(n)降至O(log n)。

2. 适用条件
  • 有序性:数据必须有序(升序或降序)

  • 单调性:问题的解空间具有单调性(如求最大值最小、最小值最大)

3. 算法模板
python">def binary_search(arr, target):  left, right = 0, len(arr) - 1  # 初始化左右指针  while left <= right:  mid = left + (right - left) // 2  # 防止整数溢出  if arr[mid] == target:  return mid  # 找到目标,返回索引  elif arr[mid] < target:  left = mid + 1  # 目标在右半部分  else:  right = mid - 1  # 目标在左半部分  return -1  # 未找到  

二、蓝桥杯真题实战

例题:分巧克力(蓝桥杯2017省赛)

题目描述
有N块巧克力,每块大小为H[i]×W[i]。需切割出K块大小相同的正方形,求最大边长。

问题分析

  • 单调性:边长越大,能切出的块数越少

  • 二分目标:寻找满足块数≥K的最大边长

代码实现

python">def max_chocolate_size():  N, K = map(int, input().split())  H = []  W = []  for _ in range(N):  h, w = map(int, input().split())  H.append(h)  W.append(w)  # 二分范围:最小1,最大巧克力边长上限  left, right = 1, max(max(H), max(W))  ans = 0  while left <= right:  mid = (left + right) // 2  cnt = 0  # 当前边长能切出的总块数  for i in range(N):  cnt += (H[i] // mid) * (W[i] // mid)  if cnt >= K:  # 提前终止循环  break  if cnt >= K:  ans = mid  # 记录可行解  left = mid + 1  # 尝试更大的边长  else:  right = mid - 1  # 边长过大,缩小范围  return ans  print(max_chocolate_size())  

代码解析

  1. 二分初始化:左边界为1,右边界取所有巧克力的最大边长

  2. 计算块数:对每块巧克力计算能切出的块数,累加直至超过K

  3. 调整边界:根据块数是否满足条件,动态调整左右边界

三、二分查找变种与技巧

1. 查找左边界

场景:数组中存在重复元素,找到第一个等于target的位置。

python">def left_bound(arr, target):  left, right = 0, len(arr) - 1  while left <= right:  mid = left + (right - left) // 2  if arr[mid] < target:  left = mid + 1  else:  right = mid - 1  # 压缩右边界  # 检查left是否越界或找到目标  return left if left < len(arr) and arr[left] == target else -1  
2. 查找右边界

场景:找到最后一个等于target的位置。

python">def right_bound(arr, target):  left, right = 0, len(arr) - 1  while left <= right:  mid = left + (right - left) // 2  if arr[mid] <= target:  left = mid + 1  # 压缩左边界  else:  right = mid - 1  # 检查right是否有效  return right if right >=0 and arr[right] == target else -1  

四、常见错误与注意事项

  1. 整数溢出:使用mid = left + (right - left) // 2而非(left + right)//2

  2. 边界更新:确保每次循环边界必然缩小,防止死循环

  3. 终止条件while left <= rightleft = mid + 1/right = mid -1配对使用

  4. 返回值验证:最终结果需检查是否有效(如索引是否越界)

五、蓝桥杯进阶练习题

  1. 数的范围(模板题):蓝桥杯题库

  2. 旋转数组的最小值(变种):蓝桥杯2021省赛

  3. 在排序数组中查找元素的第一个和最后一个位置:LeetCode 34


http://www.ppmy.cn/news/1583145.html

相关文章

Thales靶机在网络安全教学与实战中的应用与价值

1.下载好该靶机&#xff0c;将桥接模式改为NET网段并启动 https://download.vulnhub.com/thales/Thales.zip 2.借助kali来确定该靶机的IP arp-scan -l nmap -O 192.168.56.101 3.访问改IP 192.168.56.101 4.点击manager app发现有个登录 使用msf爆破一下 msfconsole search…

docker 容器 php环境中安装gd 、mysql 等扩展

1、先配置阿里云镜像源 cd /etc/apt echo "" > sources.list echo "deb http://mirrors.aliyun.com/debian/ bullseye main contrib" >> /etc/apt/sources.list echo "deb-src http://mirrors.aliyun.com/debian/ bullseye main contrib&q…

springboot继承使用mybatis-plus举例相关配置,包括分页插件以及封装分页类

以下是使用 MyBatis-Plus 分页插件的完整配置和封装步骤&#xff0c;包括日志输出、驼峰转下划线、逻辑删除以及分页属性类的封装。 1. 引入依赖 确保在 pom.xml 中已经引入 MyBatis-Plus 的依赖&#xff1a; <XML> <dependency><groupId>com.baomidou<…

《Python深度学习》第七讲:生成式深度学习

在深度学习的世界里,生成式模型是一种非常有趣且富有创造力的技术。它们能够生成全新的内容,比如文本、图像、音乐等,甚至可以创造出从未见过的虚拟世界。这一讲,我们将深入探讨生成式深度学习的核心技术,包括 LSTM 文本生成、DeepDream、神经风格迁移、变分自编码器(VAE…

阿里开源的免费数据集成工具——DataX

企业里真实的数据流转是什么样子的呢&#xff1f; 左侧描述了一个企业真实的样子&#xff0c;我们总是需要把数据从一个地方搬到另一个地方&#xff0c;最后就是搬来搬去搬成了一张张解不开的网。 右侧则表达了使用DataX为中心实现数据的同步。 什么是DataX DataX是一个异构…

大数据Trino面试题及参考答案

目录 解释 Trino 的协调节点(Coordinator)与工作节点(Worker)的职责与交互流程 Trino 为何采用多阶段执行模型(Multi - stage Execution)?其优势是什么? 描述 Trino 查询从提交到结果返回的完整生命周期 Trino 的 “无共享”(Shared - Nothing)架构如何实现高并发…

MacOS使用GVM管理Go版本

1. 安装 bash < <(curl -s -S -L https://github.com/moovweb/gvm/raw/master/binscripts/gvm-installer)然后重新加载 shell&#xff1a; source ~/.gvm/scripts/gvm2. 安装多个Go版本 例如安装 Go 1.19 和 Go 1.21&#xff1a; gvm install go1.19 gvm install go1…

Spring Security核心源码和功能实现

Spring Security 是一个强大的安全框架,用于保护基于 Spring 的应用程序。它提供了认证、授权、防止常见安全攻击等功能。下面是对 Spring Security 的核心功能和实现的详细分析,并使用 Mermaid 绘制相关流程图。 1. 核心功能 1.1 认证(Authentication) 用户认证:验证用…