c++二分查找(往下看,有彩蛋)

小练习合集(讲解控制语句后续) 看完了前面详细的控制语句相关内容的讲解,再来看一下这里的一些小练习你会做嘛一定要看到最后哦,有彩蛋哒~~ 阅读详情

什么是二分查找?

有两个指针,分别为左指针和右指针分别指向待查找集合的首部和尾部,然后再定义一个中部指针等于首指针加尾指针除以二,如果过大,则左指针加一,如果过小,则右指针减一。

循环条件:左指针小于等于右指针。

二分查找基本模版:

int l=...;
int r=...;
while(l<=r){
    mid=(l+r)/2;
    if(...)l=mid+1;
    if(...)r=mid-1;
}

其实这篇文章是我一年前写的,一直扔在草稿箱,直到今天清理时才发现,将它写完。

既然都说到这了,那就讲一讲三分吧!!

简介
如果需要求出单峰函数的极值点,通常使用二分法衍生出的三分法求单峰函数的极值点。

为什么不通过求导函数的零点来求极值点?
客观上,求出导数后,通过二分法求出导数的零点(由于函数是单峰函数,其导数在同一范围内的零点是唯一的)得到单峰函数的极值点是可行的。

但首先,对于一些函数,求导的过程和结果比较复杂。

其次,某些题中需要求极值点的单峰函数并非一个单独的函数,而是多个函数进行特殊运算得到的函数(如求多个单调性不完全相同的一次函数的最小值的最大值)。此时函数的导函数可能是分段函数,且在函数某些点上可能不可导。

注意
只要函数是单峰函数,三分法既可以求出其最大值,也可以求出其最小值。为行文方便,除特殊说明外,下文中均以求单峰函数的最小值为例。

三分法与二分法的基本思想类似,但每次操作需在当前区间 [l, r](下图中除去虚 线范围内的部分)内任取两点 lmid, rmid(lmid < rmid)(下图中的两蓝点)。如 下图,如果 f(lmid) < f(rmid),则在 [rmid, r](下图中的红色部分)中函数必然 单调递增,最小值所在点(下图中的绿色部分)必然不在这一区间内,可舍去这一区 间。反之亦然。

注意 
在计算lmid和rmid时,需要防止数据溢出的现象出现。

三分法每次操作会舍去两侧区间中的其中一个。为减少三分法的操作次数,应使 两侧区间尽可能大。因此,每一次操作时的 lmid 和 rmid 分别取 mid − ε 和 mid + ε 是一个不错的选择。

代码实现

while (r - l > eps) {
  mid = (lmid + rmid) / 2;
  lmid = mid - eps;
  rmid = mid + eps;
  if (f(lmid) < f(rmid))
    r = mid;
  else
    l = mid;
}

 

csp信奥赛C++高频考点专项训练:【二分查找】案例3:保龄球 阅读详情

相关推荐

csp信奥赛C++高频考点专项训练:【二分查找】案例2:烦恼的高考志愿

csp信奥赛C++高频考点专项训练:【二分查找】案例2:烦恼的高考志愿

王老师青少年编程 1375

C++学习笔记——二叉搜索树

接下来的部分将会记录一些数据结构。有时候看一本书,就像欣赏一部电影,在无数的铺垫后,结局便浮现出来了。先来说一说第一个数据结构——二叉搜索树。 目录 概念 基础操作 创建 插入 查询 删除 彩蛋 概念 二叉搜索树,之所以是搜索树,是因为便于搜索。二叉搜索树可以说是堆的一种进化,因为堆的父亲结点总是比孩子结点大或者小,这要看是大堆还是小堆。那么二叉搜索数满足的是节点总是比左...

走过路过不要错过 715

csp信奥赛C++高频考点专项训练:【二分查找】案例4:[CSP-J 2022] 解密

csp信奥赛C++高频考点专项训练:【二分查找】案例4:[CSP-J 2022] 解密

王老师青少年编程 1312

程序设计实验之二分算法C++实现

B-四个数列 Sample Input 6 -45 22 42 -16 -41 -27 56 30 -36 53 -37 77 -36 30 -75 -46 26 -38 -10 62 -32 -54 -6 45 Sample Output 5 解:事实证明这道题暴力肯定会超时。根据老师在课堂上讲,可以先把A,B两个数组的数自由组合加起来,C,D两个数组的数自由组合加起来,然后利用...

ニャンコちゃん的博客 401

【GESP C++五级考试考点详细解读】

【GESP C++五级考试考点详细解读】

王老师青少年编程 2440

csp信奥赛C++必备英语词汇表

csp信奥赛C++必备英语词汇表

王老师青少年编程 704

1.跳表简介

跳表简介

做一个善良的人,做好自己的事,如果愿意,再发一份光。 790

CSP/信奥赛C++刷题训练:经典二分答案例题(3): Time Management S

CSP/信奥赛C++刷题训练:经典二分答案例题(3): Time Management S

王老师青少年编程 291

Dilhao的勇气(二分)c++

​链接:登录—专业IT笔试面试备考平台_牛客网来源:牛客网。

qq_62235017的博客 71

CSP/信奥赛C++刷题训练:经典二分答案例题(1):砍树

CSP/信奥赛C++刷题训练:经典二分答案例题(1):砍树

王老师青少年编程 1085

程序员的520爱情代码展示

代码不仅是逻辑与功能的体现,同样也可以作为一种情感表达的媒介。520在中国文化中被赋予了“我爱你”的特殊含义,成为了表达情感的一个符号。本章将深入探讨520代码创作的主题,了解其文化背景,创意来源及意义,并且展示如何通过不同的编程语言来表达个性化的情感。函数是执行特定任务的代码块。它们可以接受输入参数,执行一系列操作,并可选地返回值。函数使代码更加模块化,易于维护和重用。在JavaScript中,你可以这样定义一个函数:在使用变量和函数时,需要了解作用域的概念。

weixin_32836713的博客 1288

系统设计 024:从GFS到海量KV系统设计

本文深入剖析分布式存储系统GFS的核心设计,重点解析三副本策略、心跳机制和写入流程三大关键技术。通过对比分析不同方案的优劣,揭示GFS"2近1远"副本部署、从节点主动上报心跳、主副本转发写入等创新设计如何实现数据安全与性能的平衡。最后以一道系统设计面试题为例,演示100亿KV只读服务的正确设计思路:通过将索引全量加载到内存,避免磁盘查找带来的性能瓶颈。全文贯穿理论解析与实战案例,为后端工程师提供分布式存储系统的深度认知框架和面试解题方法论。

软件科学-郝学胜 4149

Fastwhisper + Pyannote 实现 ASR + 说话者识别

最近在研究ASR相关的业务,也是调研了不少模型,踩了不少坑,ASR这块,目前中文普通话效果最好的应该是阿里的modelscope上的中文模型了,英文的话,还是非whisper莫属了,而且whisper很变态,粤语效果也还不错,因此,如果实际业务中需要涉及到不同的语言,还是更推荐whisper多一点faster-whisper是使用CTranslate2对OpenAI的Whisper模型的重新实现,CTranslate2是一个用于Transformer模型的快速推理引擎。

qq_44193969的博客 1万+

拜托,面试别再问我跳表了!

何为跳表? 跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。 跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。 跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。 跳表详解 有序链表 考虑一个有序链表,我们要查找3、7、17这几个元素,我们只能从头开始遍历链表,直到查找到元素为止。 上述这个链表是有序的,但是不能使用二分查找,是不是很捉急?(P.S....

weixin_33860722的博客 112

Ubuntu新手必看:3种方法快速查看和编辑JSON文件(附jq安装指南)

本文为Ubuntu新手详细介绍了三种查看和编辑JSON文件的核心方法:命令行利器jq、灵活脚本Python以及直观的图形化编辑器(如VS Code)。文章重点解析了jq的安装与核心用法,并对比了各方案的优缺点,帮助用户根据快速查询、复杂处理或直观编辑等不同场景,选择最合适的工具,从而高效处理JSON数据。

weixin_29229989的博客 418

告别130MB/s瓶颈!用Zynq+NVMe实现1.2GB/s高速存储的PL数据分流实战

本文详细介绍了如何通过Zynq+NVMe实现1.2GB/s高速存储的PL数据分流方案,突破传统Zynq架构130MB/s的瓶颈。文章分享了PL直连NVMe的硬件架构设计、软件栈优化及性能调优实战技巧,帮助开发者实现高速数据流的稳定存储。

weixin_42653691的博客 372

二叉搜索树(C++)

初阶版搜索二叉树

2401_83456040的博客 1035

分析android逆向的学习路线

俗话说:“一入逆向深似海,从此头发是路人”。 安卓逆向作为当下热门行业“网络安全”的主要技术之一,已经受到了越来越多人的青睐。但是很多刚入门的新手小伙伴对于怎么去学习却还很是迷糊。本文就分享一下android逆向的学习路线供大家参考。 目前学习安卓逆向的人群大约分为两种: 第一种是完全没有任何基础的计算机纯小白; 第二种是本来就做开发懂编程的IT行业人员。 我们就针对这两个不同的人群做一下安卓逆向的学习路线分析。 一、无基础小白想入门 作为没有任何基础想要入门的计算机纯小白,学习上推荐参照以下步骤: (一

Hacker_by_V的博客 3078

【csp-j信奥赛初赛如何取得优异成绩】

csp-j信奥赛初赛如何取得优异成绩

王老师青少年编程 1611

微信小程序 - 苹果ios无法播放视频、安卓android手机可以播放,使用video播放MP4视频时安卓正常播放视频iOS无法播放出现黑屏、加载失败或一片黑没反应等(uniapp微信小程序也能解决)

微信小程序ios无法播放视频,微信小程序 video标签 ios不能播放视频或视频黑屏,ios无法播放视频,android手机可以播放,视频格式为mp4,uniapp微信小程序安卓设备android可以播放在线网络视频 ,苹果ios设备无法播放视频,微信小程序 video标签 ios不能播放视频或视频黑屏,安卓手机正常播放iPhone手机却黑屏,如何解决这个问题,在线播放视频URL链接,iOS无法播放MP4视频文件的解决方案,在Android设备上可以正常播放,但在iOS设备上却出现黑屏、无法加载或无法播放

🏆 前端领域优质创作者 1万+

深度解析:LPDDR5 采样 Mask 背后的秘密 —— 从 Jitter 到 BER 全面剖析

在 LPDDR5 中,CK/DQS 信号相当于“指挥棒”,而数据(DQ)要在时钟节拍里被准确采样。Crosspoint Mask 区域横轴:时间 (Time)纵轴:电压 (Vref)👉 只要采样点落在这个区域内,数据就是正确的。否则就会出错。BERPBERPMask 就像高速公路的收费站口,如果车(采样点🚗)在车道内,顺利通过;一旦跑偏,就撞护栏。LPDDR5 的速率极高,UI 非常短,Mask 区域成为核心指标各种 Jitter、Noise 会不断压缩 Mask。

weixin_43199439的博客 354

网易2017春招笔试真题解析:从动态规划到矩阵快速幂

在程序员求职中,算法与数据结构是笔试面试的必考基石。动态规划、贪心算法、矩阵快速幂等概念,是解决复杂问题的核心工具。理解这些算法的原理与适用场景,能够帮助候选人高效应对各类编程挑战。从复杂度分析到边界条件处理,系统掌握这些基础能力,是校招笔试取得好成绩的前提。通过拆解网易2017春招笔试真题,深入分析0-1背包转化、数字根数学化简、矩阵快速幂优化等典型题目,结合实战经验总结刷题方法论,为备战春招的开发者提供切实可行的提升路径。

weixin_34296641的博客 685

基于Simulink的发动机管理系统中的自适应增压控制系统设计

通过上述详细设计步骤,我们成功开发了一个基于Simulink的自适应增压控制系统。该系统不仅能够实时监测和预测发动机的运行状态,动态调整增压压力目标值,还具备实时监控、故障诊断和保护功能,确保系统的安全性和可靠性。此外,通过仿真实验和硬件在环测试,我们验证了系统的性能,并对其进行了优化,使其能够更好地满足实际应用需求。这个项目展示了如何利用MATLAB/Simulink的强大功能,结合控制理论和工程实践,开发出高效、可靠的自适应增压控制系统。

MHD0815的博客 221

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 252

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 322

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: 洛谷最新题解P1782旅行商的背包
下一篇: 洛谷P1441砝码称重(二进制讲法)
火龙果king
博客等级 码龄5年 89粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值