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

算法——二分法

目录

    • 基本介绍
    • 实现
      • 后继
        • 定义
        • 举例
        • 代码
      • 前驱
        • 定义
        • 举例
        • 代码

基本介绍

二分法是 每次都排除半个区间,然后在剩余的半个区间内寻找解 的方法,排除半个区间的前提是:区间是有序的,这样一来,当解 小于 区间中点时,就可以在 左子区间 寻找;当解 大于 区间中点时,就可以在 右子区间 寻找。当解 等于 区间中点时,根据要求在子区间寻找或返回。

实现

二分法有两种实现:一种是找 前驱,一种是找 后继。在解决实际问题时需要根据问题的要求不同来采取不同的实现。

后继

定义

在单调递增序列中找 x x x x x x 的后继 的定义:在单调递增序列 a 中,如果有 x x x,则找第一个 x x x 的位置;如果没有 x x x,则找比 x x x 大的 第一个数 的位置。

举例

例如对于 a = [1, 2, 4, 4, 6],如果要找 4 4 4 4 4 4 的后继,则返回 第一个 4 4 4 的索引 2;如果要找 3 3 3 3 3 3 的后继,则返回比 3 3 3 大的 第一个数(即第一个 4 4 4)的索引 2

代码
int binarySearch(int[] nums, int target) {int left = 0, right = nums.length - 1; // left, right 分别是区间的左端点和右端点while (left < right) {int mid = left + (right - left >> 1);if (target <= nums[mid]) { // 如果目标值小于或等于区间中点right = mid; // 则在左子区间查找} else { // 如果目标值大于区间中点left = mid + 1; // 则在右子区间查找}}return left; // 返回 第一个target的位置 或 第一个比target大的元素的位置
}

前驱

定义

在单调递增序列中找 x x x x x x 的前驱 的定义:在单调递增序列 a 中,如果有 x x x,则找最后一个 x x x 的位置;如果没有 x x x,则找比 x x x 小的 最后一个数 的位置。

举例

例如对于 a = [1, 2, 4, 4, 6],如果要找 4 4 4 4 4 4 的前驱,则返回 最后一个 4 4 4 的索引 3;如果要找 5 5 5 5 5 5 的前驱,则返回比 5 5 5 小的 最后一个数(即最后一个 4 4 4)的索引 3

代码
int binarySearch(int[] nums, int target) {int left = 0, right = nums.length - 1; // left, right 分别是区间的左端点和右端点while (left < right) {int mid = left + (right - left + 1 >> 1);if (target < nums[mid]) { // 如果目标值小于区间中点right = mid - 1; // 则在左子区间查找} else { // 如果目标值大于或等于区间中点left = mid; // 则在右子区间查找}}return left; // 返回 最后一个target的位置 或 最后一个比target小的元素的位置
}
http://www.lryc.cn/news/397634.html

相关文章:

  • 「PaddleOCR」 模型应用优化流程
  • VUE2 子组件传多个参数,父组件函数接收所有入参并加自定义参数
  • less和sass有啥区别哪个更加好
  • Qt Design Studio 4.5现已发布
  • GCN-LSTM实现时空预测
  • 《算法笔记》总结No.6——贪心
  • 久期分析与久期模型
  • MybatisPlus 使用教程
  • bash: redi-cli: 未找到命令...
  • linux 内核 红黑树接口说明
  • 【ELK】filebeat 和logstash区别
  • CNN -1 神经网络-概述
  • 插片式远程IO模块:Profinet总线耦合器在STEP7配置
  • python3读取shp数据
  • pytorch实现水果2分类(蓝莓,苹果)
  • Redis实践经验
  • 分类题解清单
  • QUdpSocket 的bind函数详解
  • [spring] Spring MVC - security(下)
  • 数据库数据恢复—SQL Server数据库由于存放空间不足报错的数据恢复案例
  • spring security的demo
  • 无需构建工具,快速上手Vue2 + ElementUI
  • 通信协议_Modbus协议简介
  • LabVIEW优化氢燃料电池
  • SpringCloudGateway
  • Wireshark 对 https 请求抓包并展示为明文
  • 如何在Ubuntu环境下使用加速器配置Docker环境
  • 2.5 C#视觉程序开发实例1----CamManager实现模拟相机采集图片
  • 算法简介:什么是算法?——定义、历史与应用详解
  • xss攻击