【二分算法】-- 三种二分模板总结

文章目录

  • [1. 特点](#1. 特点)
  • [2. 学习中的侧重点](#2. 学习中的侧重点)
    • [2.1 算法原理](#2.1 算法原理)
    • [2.2 模板](#2.2 模板)
      • [2.2.1 朴素二分模板(easy-->有局限)](#2.2.1 朴素二分模板(easy-->有局限))
      • [2.2.2 查找左边界的二分模板](#2.2.2 查找左边界的二分模板)
      • [2.2.3 查找右边界的二分模板](#2.2.3 查找右边界的二分模板)

1. 特点

二分算法是最恶心,细节最多,最容易写出死循环的算法====但是,一旦掌握了之后,二分算法就是最简单的算法。

其实并不是一定要二分,三分,四分也都可以,但是根据概率学中的求期望数学中可知,二分是效率最高的。

如果是三分的话,我们就像是在赌,如果赌对了,那么就直接舍弃掉三分之二的数据,但是如果失败了那么就只能舍弃掉三分之一的数据。

2. 学习中的侧重点

2.1 算法原理

只有在数组有序的情况下才能使用二分算法(×)。

实际情况是,只要能发现一些规律(二段性)就能使用二分算法。

2.2 模板

不要死记硬背×3!!!------>理解之后再记忆。

2.2.1 朴素二分模板(easy-->有局限)

java 复制代码
while (left <= right){//条件一定是带等号的
   int mid = left + ((right - left)/2);//防止溢出
    if (.....){
        left = mid + 1;
    } else if (.....) {
        right = mid - 1;
    }else {
        return .....;
    }
}

2.2.2 查找左边界的二分模板

细节处理:

  1. 循环条件
    left < right
  • left = right的时候,就是最终结果,无需判断。
  • 如果判断,就会死循环
  1. 求中点的操作
    left + (right - left) / 2
java 复制代码
while (left < right){
    int mid = left + (left - right) / 2;
    if (....){
        left = mid + 1;
    }else{
        right = mid;
    }
}

2.2.3 查找右边界的二分模板

细节处理:

  1. 循环条件
    left < right
  • left = right的时候,就是最终结果,无需判断。
  • 如果判断,就会死循环
  1. 求中点的操作
    left + (right - left + 1) / 2
java 复制代码
while (left < right){
    int mid = left + (left - right + 1) / 2;
    if (....){
        left = mid;
    }else{
        right = mid - 1;
    }
}

第2和3种模板是万能模板,但是细节比较多。
记忆:当下面出现 - 1 时,上面就加 + 1

相关推荐
JPower_mr.g1 分钟前
SmartCall 音色管理技术解析:基于 SPI 的可扩展音色注册架构
java·开发语言·人工智能·ai·架构·开源
测试开发Kevin2 分钟前
IDEA工程结构解析:项目、模块、库、Facet、Artifact (工件) 概念说明
java·ide·intellij idea
大侠归来4 分钟前
Spring Boot 2.1 → 3.5 迁移推演:从实战出发的完整路线图
java·spring boot·后端
淡海水8 分钟前
02-04-原理篇-GC Roots与对象图遍历
算法·unity·c#·图·gc·遍历·roots
Wang's Blog11 分钟前
Java 中间件之 RabbitMQ 快速入门: SpringAMQP 的 DirectExchange 路由模式
java·中间件·java-rabbitmq
ClickHouseDB11 分钟前
ClickHouse 大规模 OpenTelemetry 数据接入架构的可靠性演进
算法
源图客15 分钟前
浏览器开发者工具使用
开发语言·php
Shaoshing18 分钟前
BHU 润石工作室 251019自建赛题解
算法
Sweet锦25 分钟前
jDCS 开源项目:面向工业现场的 Modbus RTU 数据采集基础框架
java·spring boot·物联网·开源
海马26 分钟前
Spring Boot 开发知识整理
java·spring boot·后端