news 2026/4/18 6:33:30

对上篇二分查找的纠正和补充

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
对上篇二分查找的纠正和补充

1.上篇提到无序数组用sort排序再二分,感觉被自己蠢笑了,因为sort函数的时间复杂度O(nlogn),二分查找是(logn),所以这个是无意义的。然后上一篇sort函数用法也写错了,应该是sort(a+1, a + n+1),因为初始下标为1,注意一下就行

2.然后这里补充一下有一个极值时怎么用二分查找,假如有7个数字:1 2 3 4 3 2 1,我们想要用二分找峰值,但是它不是一个有序的数列,所以我们可以做一下变形,我们先假定一个函数y=x^2,我们对它求导后,当y`=0时,x=0,也就是说此时取得极值,也是峰值,咋们再回到我们这个数列,也可以把它看作一个函数,其中每2个相邻的数的dx=每个相邻数下标差为1,dy=arr[i]-arr[i-1],dy/dx就是此时的导数值,也可以叫变化率

那么我们此时得到一个新的数组 1 1 1 -1 -1 -1,这里就是一个从正到负的有序数组了,我们定义两个变量 int cur,pre,所以就有当前数-前一个数<0时,假设此时mid=5,那么就是说arr[5]-arr[4]<0时,找到峰值下标mid-1。以下是代码实现:

#include<iostream> #include<algorithm> using namespace std; int istop(int cur, int pre) { return cur - pre <0 ;//当前数字减去前一个数字 } int main() { int n=7;//n为数组长度 int a[100];//存储输入元素 int ans = -1; //初始化目标值下标 for (int i = 1; i <= n; i++) { //用for循环输入每一个元素 cin >> a[i]; } int l = 1, r =7;//l是数组左端点,r是右端点 while (l <= r) { //当l>r时,说明此时已经找到目标元素或者没有目标元素 int mid = (l + r) / 2; //中间点下标 if (istop(a[mid],a[mid-1])) { ans = mid-1; r = mid - 1;//继续向左找更早的位置,此时数字可能重复; } else { l = mid + 1; //向右继续查找 } } if (ans == -1) { cout << "元素x不在数组中" << endl; } else { cout << ans << endl; } return 0; }

3.如果是找极小值:把return cur - pre <0改为return cur - pre >0,原理是一样的

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 19:01:32

5分钟掌握AutoHotkey:打造专属自动化神器

5分钟掌握AutoHotkey&#xff1a;打造专属自动化神器 【免费下载链接】AutoHotkey 项目地址: https://gitcode.com/gh_mirrors/autohotke/AutoHotkey 你是否厌倦了日复一日的重复点击操作&#xff1f;想要一键完成复杂的鼠标任务&#xff1f;AutoHotkey这款强大的自动化…

作者头像 李华
网站建设 2026/4/10 14:01:09

RaceControl终极指南:告别F1TV官方客户端的所有痛点

RaceControl终极指南&#xff1a;告别F1TV官方客户端的所有痛点 【免费下载链接】RaceControl Race Control is a standalone, open source F1TV client for Windows, written in C# on the .NET platform. 项目地址: https://gitcode.com/gh_mirrors/ra/RaceControl 还…

作者头像 李华
网站建设 2026/4/6 21:04:02

从碎片化日志到全景洞察:ZincObserve跨数据源关联查询实战指南

在当今复杂的云原生环境中&#xff0c;系统产生的日志数据如同散落在沙滩上的贝壳&#xff0c;看似零散却蕴含着宝贵的业务洞察。传统的日志分析工具往往只能提供单维度的查询能力&#xff0c;难以将不同来源的数据关联起来形成完整的业务视图。ZincObserve作为新一代可观测性平…

作者头像 李华
网站建设 2026/3/16 9:51:26

【深度好文】大模型微调技术详解:从原理到实践(建议收藏)

文章系统介绍了大模型微调技术的发展历程、核心价值及主流技术方案。从AI发展的四个阶段演进到大语言模型&#xff0c;详细分析了大模型需要微调的原因&#xff08;预训练成本高、提示工程局限等&#xff09;&#xff0c;并重点解析了PEFT技术路线&#xff0c;包括Prompt Tunin…

作者头像 李华
网站建设 2026/4/16 19:47:54

55、用 SQL 管理数据

用 SQL 管理数据 1. 挑选 SQL 包 SQL 是一种用于访问数据的语言,而特定的 SQL 包则实现了这门语言。这类似于网络协议(如 SMTP)和实现该协议的服务器(如 sendmail、Postfix 和 Exim)之间的关系。理论上,你可以使用任何 SQL 包来满足 SQL 数据库需求,但实际上,使用 SQ…

作者头像 李华
网站建设 2026/4/18 5:30:47

我把公司开发后台的效率提高了10倍,就因为用了Appsmith。

前端快被CRUD写吐了&#xff1f;我用这个开源神器&#xff0c;10分钟拖拽出一个后台 作为一名前端开发&#xff0c;我最痛苦的时刻&#xff0c;莫过于产品经理跑过来说&#xff1a;“嘿&#xff0c;这里需要一个简单的后台管理页面&#xff0c;就是对数据库做个增删改查&#…

作者头像 李华