基础二分学习笔记

模板 : 

 个人倾向第一种 ;

 

 

 

 整数二分 : 

最大化查找 :

可行区域在左侧 : 查找最后一个<=q的数的下标 : 

int find(int q){// 查找最后一个 <= q 的下标 int l = 0 , r = n + 1 ;while(l + 1 < r){int mid = l + r >> 1 ;if(a[mid]<=q) l = mid ;else r = mid ;}return l ;
}

 最小化查找 : 

可行区域在右侧 : 查找第一个>=q的数的下标 :
 

int find(int q){ // 查找第一个>=q的下标 int l = 0 , r = n + 1 ;while(l + 1 < r){int mid = l + r >> 1 ;if(a[mid]>=q) r = mid ;else l = mid ;}return r;
}

浮点数二分 : 

double find(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;
}

以求一个浮点数(-10000 <= y <= 10000) 的三次方根 为例:

double find(double y){ // 最大化查找 double l = -100 , r = 100 ;while(r-l>1e-5){double mid = (l + r) / 2 ;if(mid * mid * mid <= y) l = mid;else r = mid ;}return l ;
} 

例题 : 

35 . 搜索插入位置

. - 力扣(LeetCode)

最小化查找 : 

class Solution {
public:int searchInsert(vector<int>& nums, int target) {// 第一个 >= target 的下标int n = nums.size() ;int l = -1 , r = n ;while(l + 1 < r){// l + 1 == n 结束int mid = l + r >> 1 ;if(nums[mid]>=target) r = mid ;else l = mid ;}// nums[r] ;return r ; }
};

P2249 【深基13.例1】查找

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

最小化查找 : 

#include<bits/stdc++.h>
using namespace std ;
const int N = 1e6 + 10 ;
int a[N] ;
int main(){int n , m ; cin >> n >> m ; for(int i=1;i<=n;i++) cin >> a[i] ;while(m--){int q ; cin >> q ;int l = 0 , r = n + 1 ;while(l + 1 < r){int mid = l + r >> 1 ;if(a[mid] >= q) r = mid ;else l = mid ;}if(a[r]==q) cout << r << " " ;else cout << -1 << " " ;}
}

P1024 [NOIP2001 提高组] 一元三次方程求解

[NOIP2001 提高组] 一元三次方程求解 - 洛谷

浮点数二分 : 

#include<bits/stdc++.h>
using namespace std ;
const int N = 1e6 + 10 ;double a , b , c , d ; double f(double x){return a * x * x * x + b * x * x + c * x + d ;	
}double find(double l , double r){while(r-l>0.0001){double mid = (l + r) / 2 ;if(f(mid) * f(r) < 0) l = mid ;else r = mid ;}return l ;
}int main(){cin >> a >> b >> c >> d ;for(int i=-100;i<100;i++){double y1 = f(i) , y2 = f(i + 1) ;if(!y1) printf("%.2f ",1.0 * i) ;if(y1 * y2 < 0){printf("%.2f " , find(i , i + 1)) ;}}
}

学习视频地址 : 

A05 二分查找算法 最好的板子_哔哩哔哩_bilibili

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何限制一个账号只在一处登陆

大家好&#xff0c;我是广漂程序员DevinRock&#xff01; 1. 需求分析 前阵子&#xff0c;和问答群里一个前端朋友&#xff0c;随便唠了唠。期间他问了我一个问题&#xff0c;让我印象深刻。 他问的是&#xff0c;限制同一账号只能在一处设备上登录&#xff0c;是如何实现的…

第二篇【传奇开心果系列】Python的自动化办公库技术点案例示例:深度解读Pandas金融数据分析

传奇开心果博文系列 系列博文目录Python的自动化办公库技术点案例示例系列 博文目录前言一、Pandas 在金融数据分析中的常见用途和功能介绍二、金融数据清洗和准备示例代码三、金融数据索引和选择示例代码四、金融数据时间序列分析示例代码五、金融数据可视化示例代码六、金融数…

CUDA 中的线程组织

明朝那些事中有一句话&#xff1a;我之所以写徐霞客是想告诉你&#xff0c;所谓千秋霸业万古流芳&#xff0c;与一件事相比&#xff0c;其实都算不了什么&#xff0c;这件事情就是——用你喜欢的方式度过一生。 我们以最简单的 CUDA 程序&#xff1a;从 GPU 中输出 Hello World…

C++基于多设计模式下的同步异步日志系统day4

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C基于多设计模式下的同步&异步日志系统 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 只要内容主要实现了同步日志消息…

Unreal触屏和鼠标控制旋转冲突问题

Unreal触屏和鼠标控制旋转冲突问题 鼠标控制摄像机旋转添加Input轴计算旋转角度通过轴事件控制旋转 问题和原因问题原因 解决办法增加触摸控制旋转代码触屏操作下屏蔽鼠标轴响应事件 鼠标控制摄像机旋转 通过Mouse X和Mouse Y控制摄像机旋转。 添加Input轴 计算旋转角度 通过…

外贸网站模板建站

测绘检测wordpress外贸主题 简洁实用的wordpress外贸主题&#xff0c;适合做测绘检测仪器设备的外贸公司使用。 https://www.jianzhanpress.com/?p5337 白马非马衣服WordPress外贸建站模板 白马非马服装行业wordpress外贸建站模板&#xff0c;适用于时间服装企业的官方网站…

利用redis实现秒杀功能

6、秒杀优化 这个是 图灵 的redis实战里面的一个案例 6.1 秒杀优化-异步秒杀思路 我们来回顾一下下单流程 当用户发起请求&#xff0c;此时会请求nginx&#xff0c;nginx会访问到tomcat&#xff0c;而tomcat中的程序&#xff0c;会进行串行操作&#xff0c;分成如下几个步骤…

求Sn=a+aa+aaa+aaaa+aaaaa的前n项之和

求Snaaaaaaaaaaaaaaa的前5项之和&#xff0c;其中a是一个数字&#xff0c; 例如&#xff1a;222222222222222 int main() {int a;scanf("%d", &a);int n;scanf("%d", &n);int sum 0;int tmp 0;for (int i 0; i < n; i){tmp tmp * 10 a;sum…

Wikidata数据结构及本地部署——支持SPARQL查询

Wikidata 本地部署 Github&#xff1a;https://github.com/NP-NET-research/wdel 欢迎来 star && fork && issue ~~ 有问题可以通过邮箱&#xff1a;xuzhengfei-emailqq.com 联系我~~ 文章目录 Wikidata 本地部署1、Wikidata 简介1.1 Wikidata 数据结构1.2 …

Javaweb之SpringBootWeb案例之自动配置的@Conditional源码的详细解析

3.2.3.2 Conditional 我们在跟踪SpringBoot自动配置的源码的时候&#xff0c;在自动配置类声明bean的时候&#xff0c;除了在方法上加了一个Bean注解以外&#xff0c;还会经常用到一个注解&#xff0c;就是以Conditional开头的这一类的注解。以Conditional开头的这些注解都是条…

【数据结构】B树

1 B树介绍 B树&#xff08;英语&#xff1a;B-tree&#xff09;&#xff0c;是一种在计算机科学自平衡的树&#xff0c;能够保持数据有序。这种数据结构能够让查找数据、顺序访问、插入数据及删除的动作&#xff0c;都在对数时间内完成。B树&#xff0c;概括来说是一个一般化的…

黑科技工具盒源码 好用的手机工具盒iAPP源码

全新推出&#xff01;多功能工具箱&#xff1a;一款实用的手机工具集&#xff0c;提供丰富的免费小工具&#xff0c;操作简便。目前包含六项黑科技功能&#xff0c;分别为QQ云端、短信测压、Q绑查询、照妖镜、chatgpt、网页一键打包APP。工具箱体积小巧&#xff0c;不占内存&am…