当前位置: 首页 > news >正文

[优选算法专题三二分查找——NO.17二分查找]

题目链接:二分查找

题目描述:

题目解答:

  1. 使用闭区间 [left, right] 作为搜索范围
  2. 循环条件 left <= right 确保当区间内还有元素时继续搜索
  3. 中间值计算 mid = left + (right - left) / 2 有效避免了整数溢出问题
  4. 根据中间元素与目标值的比较,动态调整搜索区间的边界
  5. 找到目标值时直接返回索引,未找到则返回 -1

时间复杂度为 O (log n),空间复杂度为 O (1),是二分查找的经典应用。


总结朴素二分模板

朴素二分模板主要用来在有序数组中查找目标值,思路很简单:

通过不断将区间对半分,判断目标值在左半部分还是右半部分,直到找到或区间为空。

朴素二分模板(C++)

int binary_search(vector<int>& nums, int target) {int left = 0, right = nums.size() - 1;while (left <= right) {int mid = left + (right - left) / 2;  // 防溢出if (nums[mid] == target) {return mid;  // 找到目标} else if (nums[mid] < target) {left = mid + 1;  // 目标在右半部分} else {right = mid - 1;  // 目标在左半部分}}return -1;  // 未找到
}

关键点

  • 循环条件left <= right(闭区间 [left, right])
  • mid 计算:用 left + (right - left) / 2 避免溢出
  • 区间调整
    • nums[mid] < target → 目标在右侧 → left = mid + 1
    • nums[mid] > target → 目标在左侧 → right = mid - 1

http://www.dtcms.com/a/394379.html

相关文章:

  • 一文学会c++哈希
  • 【06】EPGF 架构搭建教程之 本地环境管理工具的本地化
  • 【开发实践】DNS 报文分析与 CDN 架构可视化方案
  • Ubuntu 系统下 Nginx + PHP 环境搭建教程
  • AI 如何改变日常生活
  • 字典树 Trie 介绍、实现、封装与模拟 C++STL 设计
  • 第一性原理(First Principles Thinking)
  • 1.UE-准备环境(一)-账号注册和打开虚幻引擎源码页面
  • javascript `AbortController`
  • 时间复杂度与空间复杂度
  • rocketmq队列和消费者关系
  • RAG评估指南:从核心指标到开源框架,打造高效检索生成系统
  • xtuoj 0x05-A 前缀和
  • 防误删 (实时) 文件备份系统 (btrfs 快照 + rsync)
  • 【FreeRTOS】第七课(1):任务间通信(使用队列)
  • OD C卷 - 二叉树计算
  • DiffDock 环境安装和使用教程
  • NVIC中的不可屏蔽中断NMI(Non-Maskable Interrupt)是什么?
  • TypeORM 浅析
  • 2.4 死锁 (答案见原书 P165)
  • 算法与数据结构:常见笔试题总结
  • trae使用playwright MCP方法流程
  • anaconda安装tensorflow遇到的一个错误
  • 不同浏览器对 http.server 提供MP4 文件支持差异分析
  • Python 实战:内网渗透中的信息收集自动化脚本(10)
  • leetcode 206 反转链表
  • AI智能的网站SEO优化服务商
  • 生产者客户端
  • Puppeteer 在爬取电商 JavaScript 页面的使用
  • 2015/12 JLPT听力原文 问题四