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

789. 数的范围

题目链接

思路

数据较大,且找左右端点,利用二分
此题考察二分写法
具体详见代码注释
我觉得二分的整体思路是很好理解的,难的地方就在于写法上的细节,比如要不要+1,要不要等于
总结小规律:
找哪边,哪边就+1,另一边就=

代码


#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 3;
int a[N];
int n;
int main()
{int q;cin >> n >> q;for (int i = 1; i <= n; i ++ ){cin >> a[i];}while (q -- ){int ll, rr;int l = 1, r = n;int x;cin >> x;while (l < r) //标准模板 {int mid = (l + r) / 2; //中间值 if (a[mid] < x) //因为要找左端点,所以左端点等于时就不能动了,所以只能写小于 {l = mid + 1; //小于的话,+1后就有可能等于,以后就不动了 }else if (a[mid] >= x) //让左端点不动,让右端点往左边靠,在左右范围里都,数都相等的情况下,比如l = 2, r = 3. a[l] = 2 , a[r] = 3, 要找左端点,(2 + 3) / 2,得到2=x,r就与l相等了 {r = mid;}}//如果找到了数,就记录答案 if (a[l] == x) {ll = l;}else //没找到数就输出-1 {cout << "-1 -1" << endl;continue;}//找右端点 l = 1, r = n;while (l < r){//因为(2 + 3) / 2 = 2,如果要找3,就永远找不到,就+1,让它往右边取 int mid = (l + r + 1) / 2;//与上面相反,这里是左边往右边靠,右边确定后不动,左边一步步靠近 if (a[mid] <= x){l = mid;} //-1后很有可能正好是x,那么就不动了,如果不是,缩小点范围也没有影响 else if (a[mid] > x){r = mid - 1;}}
//		//上面已经判过,如果有解,那么此处也一定有解 cout << ll - 1 << " " << l - 1 << endl;}return 0;} 

小扩展

>>1 右移一位相当于除以二

相关文章:

  • HTML5-原生History
  • 解决vue 部分页面缓存,部分页面不缓存的问题
  • 2023.11.15 关于 Spring Boot 配置文件
  • 基于Vue+SpringBoot的农村物流配送系统 开源项目
  • 使用composer安装ffmpeg的步骤
  • 数组相关面试题--5.合并两个有序数组
  • LEEDCODE 220 存在重复元素3
  • 数据分析场景下,企业如何做好大模型选型和落地?
  • 通付盾Web3专题 | KYT/AML:Web3合规展业的必要条件
  • 12 Go的接口
  • System.lineSeparator() 解决 append(“\r\n“) 换行符抛异常:No such file or diretory
  • 【C++】:STL——标准模板库介绍 || string类
  • how to find gcc openbug
  • 【计算机网络】TCP协议
  • 【Kingbase FlySync】命令行:同步软件安装部署,并实现KES到KES实现同步迁移
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 「译」Node.js Streams 基础
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Computed property XXX was assigned to but it has no setter
  • co模块的前端实现
  • JavaScript实现分页效果
  • js写一个简单的选项卡
  • mysql外键的使用
  • Odoo domain写法及运用
  • 订阅Forge Viewer所有的事件
  • 坑!为什么View.startAnimation不起作用?
  • 前端工程化(Gulp、Webpack)-webpack
  • 入手阿里云新服务器的部署NODE
  • 使用Swoole加速Laravel(正式环境中)
  • 数据结构java版之冒泡排序及优化
  • 网络应用优化——时延与带宽
  • 小程序测试方案初探
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​520就是要宠粉,你的心头书我买单
  • ###C语言程序设计-----C语言学习(3)#
  • #1014 : Trie树
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • $forceUpdate()函数
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (二)pulsar安装在独立的docker中,python测试
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (一)RocketMQ初步认识
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • ****Linux下Mysql的安装和配置
  • . NET自动找可写目录
  • .axf 转化 .bin文件 的方法
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .gitignore文件设置了忽略但不生效
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .Net 访问电子邮箱-LumiSoft.Net,好用