news 2026/8/25 6:43:38

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

作者头像

张小明

前端开发工程师

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/8/25 4:52:08

高效配置yowsup项目的pre-commit代码质量检查实战指南

在即时通讯库yowsup的开发过程中&#xff0c;代码质量直接影响着项目的稳定性和可维护性。许多开发团队在协作时经常遇到代码风格不统一、格式混乱、低级错误频发等问题&#xff0c;这不仅增加了代码审查的负担&#xff0c;也降低了开发效率。本文将为您提供一套完整的pre-comm…

作者头像 李华
网站建设 2026/8/24 23:16:50

Bruce Web界面终极指南:远程控制渗透测试设备的完整解决方案

Bruce Web界面终极指南&#xff1a;远程控制渗透测试设备的完整解决方案 【免费下载链接】Bruce Firmware for m5stack Cardputer, StickC and ESP32 项目地址: https://gitcode.com/GitHub_Trending/bru/Bruce Bruce固件为M5Stack Cardputer、StickC和ESP32设备提供了强…

作者头像 李华
网站建设 2026/8/25 19:25:41

C语言之switch 语句

很多初学者认为 switch 只是 if-else 的另一种写法&#xff0c;但实际上它在底层实现&#xff08;跳转表&#xff09;和代码可读性上有独特的优势。以下是关于 switch 语句从基础语法到底层原理&#xff0c;再到实战陷阱的全方位指南。一、 switch 的核心语法结构switch 是一种…

作者头像 李华
网站建设 2026/8/25 7:10:57

66、深入解析 Linux 安全技术:用户账户与密码管理

深入解析 Linux 安全技术:用户账户与密码管理 1. Linux 备份工具概述 在 Linux 系统中,有多种备份工具可供选择,其中 cpio、dump/restore 和 tar 通常是预安装的。而 amanda 虽然默认未安装,但因其具有高度的灵活性,甚至能备份 Windows 系统,所以广受欢迎。若你想了解更…

作者头像 李华
网站建设 2026/8/25 23:18:36

46、深入理解Linux基础网络配置

深入理解Linux基础网络配置 1. 网络配置的重要性与目标 在当今数字化时代,大多数Linux系统都需要连接到网络,无论是作为客户端、服务器,还是两者兼具。即便是家用电脑和智能手机等专用设备,通常也会连接到互联网。因此,配置Linux的基本网络工具是全面配置Linux系统的必要…

作者头像 李华
网站建设 2026/8/25 22:38:07

Daily Report — Day 7(Beta)

2025-12-12 10:30:00✅ 昨日完成工作&#xff08;Day 6 落地成果&#xff09;测试体系深化&#xff1a;zc 完成 Jest TypeScript 异步测试支持配置&#xff0c;成功输出覆盖率报告&#xff1b;lzy 扩展推荐算法异常与边界场景测试用例&#xff0c;单测覆盖率提升至 70%&#x…

作者头像 李华