news 2026/1/26 5:56:02

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

作者头像

张小明

前端开发工程师

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/1/24 5:05:36

ControlNet OpenPose SDXL:AI绘图的姿势控制终极指南

ControlNet OpenPose SDXL&#xff1a;AI绘图的姿势控制终极指南 【免费下载链接】controlnet-openpose-sdxl-1.0 项目地址: https://ai.gitcode.com/hf_mirrors/thibaud/controlnet-openpose-sdxl-1.0 在AI绘图领域&#xff0c;如何精确控制生成图像中人物的姿势一直是…

作者头像 李华
网站建设 2026/1/24 9:57:01

day36官方文档的阅读@浙大疏锦行

day36官方文档的阅读浙大疏锦行 准备工作 import pandas as pd from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier import pdpbox from pdpbox import pdp, info_plots# 打…

作者头像 李华
网站建设 2026/1/24 9:57:19

认证--JSON

认证--JSON课程计划登录成功/失败之后返回json字符串未登录错误提示退出登录json提示获取个人信息/修改个人信息JSON登录手机号验证码登录一、登录成功/失败返回JSON1、修改第一个版本的代码直接编写返回的json字符串Configuration EnableWebSecurity public class SecurityCon…

作者头像 李华
网站建设 2026/1/24 9:56:14

dotNetFx40_Full_x86_x64完整安装包:快速部署.NET Framework 4.0开发环境

dotNetFx40_Full_x86_x64完整安装包&#xff1a;快速部署.NET Framework 4.0开发环境 【免费下载链接】dotNetFx40_Full_x86_x64完整安装包 此项目提供 dotNetFx40_Full_x86_x64 完整安装包&#xff0c;适用于需要 Microsoft .NET Framework 4.0 的用户。该安装包包含 x86 和 x…

作者头像 李华
网站建设 2026/1/24 9:59:44

芯岭技术XL2417U调试开发板 集成高性能2.4射频收发器 32位MCU USB2.0

XL2417U芯片是一款低功耗、高性能和高度集成的SoC&#xff0c;带有2.4G收发器。它集成了高性能2.4GHz射频收发器、丰富的基带功能、32位MCU和各种外围IO。它支持128KB的flash和48KB的RAM&#xff0c;以实现可编程协议和配置文件&#xff0c;支持定制应用程序。XL2417U采用先进的…

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

VS Professional 安装教程

s_professional.exe是 Visual Studio Professional&#xff08;可视化工作室 专业版&#xff09;的安装程序文件名。Visual Studio 是微软出的集成开发环境&#xff08;IDE&#xff09;&#xff0c;主要用来写 C/C、C#、VB.NET、Python、Web 前端等代码&#xff0c;还能调试、编…

作者头像 李华