【二分查找详细解析】 【图解】 例题【洛谷P2249 【深基13.例1】查找】

news2025/1/13 2:55:05

文章目录

    • 二分查找的基础解释
      • 例题【洛谷P2249 【深基13.例1】查找】
        • code↓

二分查找的基础解释

二分的时间复杂度 O ( l o g n ) O(log n) O(logn),进行二分查找的序列必须满足单调性

我们可以先定义两个值 l , r l,r l,r ,来表示查找到的左端点 l l l,和右端点 r r r

原理与代码模板如下图↓:

while(l<r){
	int mid=(l+r)>>1;
	if(check(mid)) l=mid+1;
	else r=mid;
}

定义一个样例

5
1 4 8 9 20

我们定义要查找的数 x x x (保证 x x x 一定存在), c h e c k ( m i d ) check(mid) check(mid)的条件为, m i d ≤ x mid\le x midx,则 c h e c k ( m i d ) = t r u e check(mid)=true check(mid)=true

l   r  mid
1   5   3
4   5   4

每一次,如果 c h e c k ( m i d ) check(mid) check(mid) 成立,则抛弃小于等于 m i d mid mid 的部分

同理,如果 c h e c k ( m i d ) check(mid) check(mid) 不成立,则抛弃大于 m i d mid mid 的部分

例题【洛谷P2249 【深基13.例1】查找】

题目链接:洛谷P2249 【深基13.例1】查找

题目大意:给出n个数,m个询问,每个询问包含一个整数q,输出n中最先出现的q的编号(这n个数满足单调性)

code↓
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e6+50;//定义数组边界
long long n,a[maxn]={},m,q;//n为元素个数,m为询问个数
long long check(long long mid){//检查mid是否满足条件
	if(a[mid]>=q) return 1;//如果这个数比它大,则满足条件
	else return 0;//否则不满足条件
}
int main(){
	ios::sync_with_stdio(false);//输入优化
	cin.tie(0),cout.tie(0);//输入优化
	cin>>n>>m;//输入元素个数,与询问个数
	for(int i=1;i<=n;i++) cin>>a[i];//输入数组的值
	for(int i=1;i<=m;i++){
		cin>>q;//q便是我们需要查找的数
		long long l=1,r=n;//定义初始值
		while(l<r){
			long long mid=(l+r)>>1;//mid就是这个区间的一半,>>x代表/2^{x}
			if(check(mid)) r=mid;//r的位置保持不变
			else l=mid+1;//如果比它小,则舍弃左边的值
		}
		if(a[l]==q) cout<<l<<" ";//如果找到了这个值,则输出它的编号
		else cout<<-1<<" ";//如果没找到这个数,则输出-1
	}
	return 0;
}

此题代码已AC
在这里插入图片描述

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

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

相关文章

接口与多态

通过接口实现多态 接口中声明若干个 bstract方法&#xff1b; 方法体的内容细节由实现接口的类去完成&#xff0c;不同的类有 不同的实现方式 → 则接口变量在回调接口方法时具有多 种形态。 用接口进行程序设计的核心思想 使用接口回调技术&#xff1a;接口变量存放实现该接口…

DP最长上升子序列模型

目录 怪盗基德的滑翔翼代码实现 登山代码实现 合唱队形代码实现 友好城市问题分析代码实现 最大上升子序列和代码实现 *拦截导弹问题分析代码实现扩展 *导弹防御系统问题分析代码实现 *最长公共上升子序列问题分析代码实现 LIS 问题一般有三种解法 朴素版动态规划贪心二分树状…

测试用例要如何写

1、测试点与测试用例 测试点不等于测试用例&#xff0c;这是我们首先需要认识到的。 问题1&#xff1a;这些测试点在内容上有重复&#xff0c;存在冗余。 问题2&#xff1a;一些测试点的测试输入不明确&#xff0c;不知道测试时要测试哪些。 问题3&#xff1a;总是在搭相似…

树与二叉树(数据结构)

本篇博客讲解 树与二叉树&#xff0c;后续会继续讲解堆 —————————————————————— 1.树概念及结构 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看…

CMAKE_CUDA_ARCHITECTURES set to ‘native’多版本与版本号矛盾问题,报错

CMAKE_CUDA_ARCHITECTURES set to ‘native’多版本与版本号矛盾问题&#xff0c;报错 1. 报错提醒如下图2. 原因本地安装多个cuda版本导致native寻找到多个版本&#xff0c;导致报错3. 具体配置需要根据你的显卡型号来确认 1. 报错提醒如下图 2. 原因本地安装多个cuda版本导致…

Redis - String 字符串

前言 下表中包含本博客提到的所有命令 字符串类型是 Redis 最基础的数据类型&#xff0c;关于字符串需要特别注意&#xff1a; 1&#xff09;⾸先 Redis 中所有的键&#xff08;key&#xff09;的类型都是字符串类型&#xff0c;⽽且其他⼏种数据结构也都是在字符串类似基础上…

ffmpeg 滤镜实现不同采样率多音频混音

音频混音在音视频开发中是十分重要的一个环节,所谓音频混音就是将所有需要混音的数据相加得到混音数据,然后通过某个算法进行非法数据的处理;例如相加数值超过最大值,最小值等! 在实际的音频开发中,要实现混音的流程如下: 因此我们的编码实现就分为五部分:寻找…

中经评论:“人工智能+”不止是加法

以下文章来源&#xff1a;经济日报 今年&#xff0c;“人工智能”首次被写入《政府工作报告》&#xff0c;这个新提法为发展数字经济、推进数实融合指明了新路径。值得注意的是&#xff0c;“人工智能”不是简单相加&#xff0c;而是要通过新技术催生新质生产力&#xff0c;为经…

MyBatisPlus 之三:BaseMapper 详解和 CRUD 案例详解

BaseMapper详解 1. SQL 日志开启 为了更好更快学习 MyBatisPlus &#xff0c;需要配置 SQL 日志&#xff0c;这样方便我们能随时看到执行过程中使用的 SQL 语句&#xff0c;有助于理解执行原理及方便 SQL 错误调试 mybatis-plus.configuration.log-implorg.apache.ibatis.logg…

Python 多线程大批量处理文件小程序

说明 平时偶尔需要进行重复性的对文件进行重命名、格式转化等。假设以文件复制功能作为目标&#xff0c;设计一个小程序使用多线程对文件进行批量复制。&#xff08;其实以后主要目标是针对Realsense的raw文件进行批量的转化&#xff0c;并借助多线程加速&#xff09; 代码 i…

深度学习 精选笔记(12)卷积神经网络-理论基础2

学习参考&#xff1a; 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增)&#xff0c;以达到集多方教程的精华于一文的目的。 ③非常推荐上面&#xff08;学习参考&#x…

修改yolov9的模型打印不出来Gflops的解决办法

正在修改yolov9的模块&#xff0c;发现修改后的模型没有GFlops这个参数 解决办法&#xff1a; 找到utils/torch_utils.py这个文件&#xff0c;有一个model_info函数 然后将其中的stride改为固定的640就可以打印了。 stride max(int(model.stride.max()), 32) if hasattr(mo…

扩展学习|网络问政的价值增量与实现条件:基于数据资源挖掘的视角

文献来源&#xff1a;[1]顾丹丹傅广宛.网络问政的价值增量与实现条件:基于数据资源挖掘的视角[J].中国行政管理, 2021, 000(004):76-82.DOI:10.19735/j.issn.1006-0863.2021.04.11. 一、技术赋能网络问政的机制生成 &#xff08;一&#xff09;技术赋能网络问政的流程&#xf…

关于IP-Adapter的十几个模型,到底是干啥用的?

&#x1f3a0;背景介绍 IP-Adapter的一系列模型在stable diffusion的实际应用中&#xff0c;越来越被频繁的使用到&#xff0c;用于“换脸”或者“保证角色的一致性”&#xff0c;但是很多朋友在安装或者使用别人的工作流的时候&#xff0c;经常会遇到各种各样的问题&#xff…

【JavaScript】JavaScript 运算符 ⑤ ( 赋值运算符 | 基础赋值运算符 与 复合赋值运算符 )

文章目录 一、JavaScript 赋值运算符1、赋值运算符 概念2、基础赋值运算符 与 复合赋值运算符3、复合赋值运算符4、完整代码示例 一、JavaScript 赋值运算符 JavaScript 赋值运算符种类 : 基础赋值运算符 : 等于 : ; 复合赋值运算符 : 加等 : 减等 : -乘等 : *除等 : /取模等…

开启Safari手势支持

在使用Safari 的时候&#xff0c;大家有没有觉得不支持手势使用起来不是很方便&#xff0c; 触摸板只支持少量简单的手势&#xff0c;如缩放&#xff0c;滚动等。如果使用鼠标的用户&#xff0c;则完全无法使用手势。经过折腾研究&#xff0c;使用CirMenu应用可以完美解决这个要…

RAID技术知识详解到RAID 10的linux实现过程

1.RAID技术简介 RAID&#xff08;Redundant Array of Independent Disks&#xff09;独立磁盘冗余阵列。通俗来说就是将多个硬盘通过软件或硬件结合成虚拟单台大容量的硬盘使用。 RAID技术的特点&#xff1a; 可以自动检测故障硬盘&#xff1b; 可以重建硬盘坏道的资料&…

VBA批量绘制动态化数据图表

对于大多数使用的VBA的人来说&#xff0c;处理excel工作簿中批量数据是日常工作中常见的情形&#xff0c;但与此同时&#xff0c;VBA在批量绘图方面同样有简洁快速的特点。 说起Excel画图表&#xff0c;考虑一个问题&#xff0c;excel图表的本质是什么&#xff1f;很多人会不假…

便利店小程序有哪些功能

​便利店小程序为附近的住户提供小程序在线购物的服务。用户只需要打开小程序&#xff0c;就可以购买需要的商品&#xff0c;可以选择自取或者配送。整个过程非常简单快速。下面具体介绍便利店小程序的功能。 1. **商品展示**&#xff1a;展示便利店的商品信息&#xff0c;包括…

【C++刷题】优选算法——动态规划第一辑

1.状态表示是什么&#xff1f;简答理解是dp表里的值所表示的含义怎么来的&#xff1f;题目要求经验题目要求分析问题的过程中&#xff0c;发现重复子问题 2.状态转移方程dp[i]......细节问题&#xff1a;3.初始化控制填表的时候不越界4.填表顺序控制在填写当前状态的时候&#…