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

【AcWing】1.1.3二分搜索

一、二分搜索

1、查找数的范围

  • 原题链接
    在这里插入图片描述
     这道题看似是二分搜索的题目,实则就是二分搜索。与一般的搜索不同的是,若查找元素重复,则分别返回重复元素的左端下标和右端下标,若不存在则返回“-1 -1。我们常用的二分搜索是返回的重复元素的左端下标,稍作修改,则可以返回右端元素下标。
#include<iostream>
#include<stdio.h>
using namespace std;
const int N = 1e5+10;
int a[N];//若存在重复元素,则返回左边界
int searchLeft(int q[],int l,int r,int x)
{while(l<r){int mid = l+r>>1;if(q[mid]<x){l = mid+1;}else{r = mid ;}}return l;
}
//若存在重复,则返回右边界
int searchRight(int q[],int l,int r,int x)
{while(l<r){int mid = (l+r+1)>>1;if(q[mid]<=x)l = mid;elser = mid-1;}return r;
}
int main()
{int n,m;cin>>n>>m;for(int i=0;i<n;i++){cin>>a[i];}while(m--){int num;cin>>num;//搜索左边界int pos1 = searchLeft(a,0,n-1,num);//搜索有边界if (a[pos1]!=num){cout<<"-1 -1"<<endl;}else{int pos2 = searchRight(a,0,n-1,num);cout<<pos1<<' '<<pos2<<endl;}}system("pause");return 0;
}

2、数的三次方根

  • 原题链接
  • 在这里插入图片描述
     这道题可以用二分搜索的方法,来搜索一个数的三次方根的近似解。
#include<iostream>
using namespace std;
int main()
{double x,l = -100000.0,r = 100000.0;cin>>x;while(r-l>1e-8){double mid = (l+r)/2.0;if(mid*mid*mid< x){l = mid;}elser = mid;}printf("%.6f\n",r);return 0;
}
http://www.lryc.cn/news/212385.html

相关文章:

  • 【Python第三方包】串口通信(pySerial包)
  • VS Code2023安装教程(最新最详细教程)附网盘资源
  • 最优值函数
  • 软考系统架构师知识点集锦十:计算机网络、数学与经济管理、知识产权与标准化
  • 风云七剑攻略,最强阵容搭配
  • 关于ABB 机器人多任务的建立
  • 【计算机网络笔记】传输层——多路复用和多路分用
  • 【PC】特殊空投-2023年10月
  • Android Studio 下载地址
  • General error: 2006 MySQL server has gone away thinkphp6.0 报这个错误怎么修改
  • 08 _ 栈:如何实现浏览器的前进和后退功能?
  • 【T】分治与倍增
  • 后门分析及示例
  • Vue 的双向数据绑定是如何实现的?
  • Android环境变量macOS环境变量配置
  • 设计模式(全23种)
  • 腾讯云轻量应用服务器“月流量”不够用怎么办?
  • 【esp32]VSCode-SPI控制OLED
  • vue 的一些拦截
  • iview表单提交验证特殊组件时需要注意的问题
  • OpenCV 画极线
  • Linux命令(109)之md5sum
  • JavaEE入门介绍,HTTP协议介绍,常用状态码及含义,服务器介绍(软件服务器、云服务器)
  • FPGA时序分析与约束(7)——通过Tcl扩展SDC
  • C++面试——多线程详解
  • matlab 布尔莎七参数坐标转换模型
  • Android---StartActivity启动过程
  • 隐私计算python实现Paillier同态加密
  • 代码随想录打卡第五十五天|● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组
  • C# 创建Oceanbase ODBC数据源 DSN