算法基础学习|二分

news2025/1/18 20:26:14

二分

模板

整数二分模板

bool check(int x) {/* ... */} // 检查x是否满足某种性质

// 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用(即寻找左边界使用):
int bsearch_1(int l, int r)
{
    while (l < r)
    {
        int mid = l + r >> 1;
        if (check(mid)) r = mid;    // check()判断mid是否满足性质
        else l = mid + 1;
    }
    return l;
}
// 区间[l, r]被划分成[l, mid - 1]和[mid, r]时使用(即寻找右边界使用):
int bsearch_2(int l, int r)
{
    while (l < r)
    {
        int mid = l + r + 1 >> 1;
        if (check(mid)) l = mid;
        else r = mid - 1;
    }
    return l;
}

浮点数二分模板

bool check(double x) {/* ... */} // 检查x是否满足某种性质

double bsearch_3(double l, double r)
{
    const double eps = 1e-6;   // eps 表示精度,取决于题目对精度的要求
    while (r - l > eps)
    {
        double mid = (l + r) / 2;
        if (check(mid)) r = mid;
        else l = mid;
    }
    return l;
}

例题一

题目

给定一个按照升序排列的长度为 n 的整数数组,以及 q 个查询。

对于每个查询,返回一个元素 k 的起始位置和终止位置(位置从 0 开始计数)。

如果数组中不存在该元素,则返回 -1 -1

输入格式

第一行包含整数 n 和 q,表示数组长度和询问个数。

第二行包含 n 个整数(均在 1 \sim 10000 范围内),表示完整数组。

接下来 q 行,每行包含一个整数 k,表示一个询问元素。

输出格式

共 q 行,每行包含两个整数,表示所求元素的起始位置和终止位置。

如果数组中不存在该元素,则返回 -1 -1

数据范围

1\leq n\leq 100000

1\leq k\leq 10000

1\leq q\leq 10000

输入样例

6 3
1 2 2 3 3 4
3
4
5

输出样例

3 4
5 5
-1 -1

代码示例

#include <iostream>
using namespace std;

int main() {
    int n, t;
    cin >> n >> t;
	int* array = new int[n];

    for (int i = 0; i < n; i++) {
        cin >> array[i];
    }

    while (t--) {

        int num;
        cin >> num;
        
        //寻找左边界
        int l = 0, r = n - 1;
        while (l < r) {
            int mid = l + r >> 1;
            if (array[mid] >= num) r = mid;
            else l = mid + 1;
        }

        if (array[l] != num) cout << "-1 -1" << endl;
        else {
            cout << l;

            //寻找右边界
            int l = 0, r = n - 1;
            while (l < r) {
                int mid = l + r + 1 >> 1;
                if (array[mid] <= num) l = mid;
                else r = mid - 1;
            }
            cout << " " << l << endl;
        }      
    }
}

例题二

题目

给定一个浮点数 n,求它的三次方根。

输入格式

共一行,包含一个浮点数 n

输出格式

共一行,包含一个浮点数,表示问题的解。

注意,结果保留 6 位小数。

数据范围

-10000\leq n\leq 10000

输入样例

1000.00

输出样例

10.000000

代码示例

#include <iostream>
#include <cmath>
#include <algorithm>
#include <iomanip>
using namespace std;

const double eps = 1e-8;   // eps 表示精度,取决于题目对精度的要求


int main() {
    double n;
    cin >> n;

    double l, r;
    //注意开根号的范围,1是特殊点
    if (n >= 1) l = 1, r = n;
    else if (n > 0) l = 0, r = 1;
    else if (n <= -1) l = n, r = -1;
    else l = -1, r = 0;

    while (r - l > eps)
    {
        double mid = (l + r) / 2;
        if (pow(mid, 3) >= n) r = mid;
        else l = mid;
    }
    cout << fixed << setprecision(6) << l << endl;
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1107422.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最新AI创作系统ChatGPT源码+搭建部署教程+支持GPT4.0+支持ai绘画(Midjourney)/支持Prompt

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统AI绘画系统&#xff0c;支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署…

Cocos Creator3.8 项目实战(十)使用 protobuf详细教程

在 Cocos Creator 中使用 protobuf.js 库可以方便地进行协议的序列化和反序列化。 下面是使用 protobuf.js 的详细说明&#xff1a; 一、protobuf环境安装 1、安装 npm protobuf环境安装安装需要使用 npm 命令进行&#xff0c;因此首先需要安装 npm 。 如果你还没安装 npm …

编程小白的自学笔记十六(python办公自动化操作EXCEL表格)

系列文章目录 编程小白的自学笔记十五&#xff08;python办公自动化操作EXCEL表格&#xff09; 编程小白的自学笔记十四&#xff08;python办公自动化创建、复制、移动文件和文件夹 编程小白的自学笔记十三&#xff08;python办公自动化读写文件&#xff09; 编程小白的自学…

网页下拉菜单

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鸟教程(runoob.com)</title> </head> <body><form action""> <select name"cars"> <option value"vol…

【论文阅读】点云地图动态障碍物去除基准 A Dynamic Points Removal Benchmark in Point Cloud Maps

【论文阅读】点云地图动态障碍物去除基准 A Dynamic Points Removal Benchmark in Point Cloud Maps 终于一次轮到了讲自己的paper了 hahaha&#xff0c;写个中文的解读放在博客方便大家讨论 Title Picture Reference and prenotes paper: https://arxiv.org/abs/2307.07260 …

Win10+MX350+CUDA10.2+Python3.9配置Detectron2

配置步骤: 1. 创建一个新的虚拟环境 `conda create -n 2pcnet python=3.9`(事先安装好Anaconda3) 2. 激活并进入环境: `activate new_env` 3. 安装CUDA 查看电脑显卡型号:控制面板-管理工具-计算机管理-设备管理器-显示适配器(我的是MX350) 确定显卡支持的CUDA版…

【linux】基础IO+系统文件IO+文件描述符分配规则

基础IO系统文件IO文件描述符文件描述符分配规则 1.重新谈论文件2.重谈文件操作&#xff08;C语言&#xff09;2.1C文件接口 3.系统文件IO3.1open3.2close3.3write3.4read3.5lseek3.6总结 4.如何理解文件5.文件描述符&#xff08;fd&#xff09;分配规则 自我名言&#xff1a;只…

【LeetCode刷题(数据结构与算法)】:数据结构中的常用排序实现数组的升序排列

现在我先将各大排序的动图和思路以及代码呈现给大家 插入排序 直接插入排序是一种简单的插入排序法&#xff0c;其基本思想是&#xff1a; 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为 止&#xff0c;得到一个…

“第四十三天”

这个是我自己写的&#xff0c;下面那个是看的别人的&#xff0c;其实大致都是一样的&#xff0c;通过四次循环&#xff0c;挨个求和比较&#xff0c;都很麻烦&#xff0c;但重点在于&#xff0c;对于已知变量的运用&#xff0c;当我需要在最内层循环用变量确定a数组组元时&…

数据库备份与恢复(实战mysqldump+bin-log)

一、为什么要进行数据库备份&#xff1f; 常见数据库备份的应用场景如下&#xff1a; 数据丢失应用场景&#xff1a; 人为操作失误造成某些数据被误操作 软件 BUG 造成部分数据或全部数据丢失 硬件故障造成数据库部分数据或全部数据丢失 安全漏洞被入侵数据恶意破坏 非数据丢…

基于骑手优化优化的BP神经网络(分类应用) - 附代码

基于骑手优化优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于骑手优化优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.骑手优化优化BP神经网络3.1 BP神经网络参数设置3.2 骑手优化算法应用 4.测试结果…

【STM32】---存储器,电源核时钟体系

一、STM32的存储器映像 1 文中的缩写 2 系统构架&#xff08;原理图&#xff09; 3. 存储器映像 &#xff08;1&#xff09;STM32是32位CPU&#xff0c;数据总线是32位的 &#xff08;2&#xff09;STM232的地址总线是32位的。&#xff08;其实地址总线是32位不是由数据总线是…

MultiPlayerShoot----C++学习记录02人物

获取人物和动画 可以再Mixamo下载你想要的人物&#xff0c;将文件全部导入&#xff08;不做更改&#xff09; 再在网站里选到动画&#xff0c;下载一些动画左转&#xff0c;右转&#xff0c;起跳&#xff0c;跳中&#xff0c;落下 导入动画&#xff0c;此时不用选择导入骨骼&a…

【机器学习】聚类算法Kmeans

文章目录 聚类Kmeans时间复杂度 sklearn.cluster.KMeansn_clusters模型评估指标轮廓系数卡林斯基-哈拉巴斯指数 init & random_state & n_init&#xff1a;初始质心max_iter & tolk_means函数 聚类 聚类就是按照某个特定标准(如距离准则)把一个数据集分割成不同的类…

PhotoShop批量压缩图片

打开photoshop&#xff0c;在顶部的菜单栏选择文件》脚本》图像处理器。 选择合适的参数&#xff0c;运行即可。

【Linux】:权限

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux的基础知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数…

【excel】列转行

列转行 工作中有一些数据是列表&#xff0c;现在需要转行 选表格内容&#xff1a;在excel表格中选中表格数据区域。点击复制&#xff1a;在选中表格区域处右击点击复制。点击选择性粘贴&#xff1a;在表格中鼠标右击点击选择性粘贴。勾选转置&#xff1a;在选择性粘勾选转置选…

OSI网络分层模型

OSI英文全文是Open System Interconnection Reference Model&#xff0c;翻译成中文就是开放式系统互联通信参考模型。 OSI模型分成了七层&#xff0c;部分层次与 TCP/IP 很像&#xff0c;从下到上分别是&#xff1a; 第一层&#xff1a;物理层&#xff0c;网络的物理形式&…

通讯协议学习之路:IIC协议理论

通讯协议之路主要分为两部分&#xff0c;第一部分从理论上面讲解各类协议的通讯原理以及通讯格式&#xff0c;第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN&#xff1b;视频会发布在bilibili(UID:399951374) 序&…

PyCharm运行python测试,报错“没有发现测试”/“空套件”

问题描述&#xff1a;没有发现测试/空套件 当时没截图&#xff0c;可惜了&#xff01; 解决办法 把python测试文件的文件名改为非test开头的&#xff01; &#xff08;虽然pytest的官方说要以test开头&#xff0c;但是他这样会有错误&#xff0c;就很…