【算法】二分算法——寻找峰值

题解:寻找峰值(二分算法)

目录

  • 1.题目
  • 2.暴力求解
  • 3.二分算法
  • 4.总结

1.题目

题目链接:LINK
在这里插入图片描述

2.暴力求解

暴力求解的思路很简单,这个数组的形状无非就三种:

  • 一直上升
  • 下降(这里包含先下降后上升)
  • 先升后降
    在这里插入图片描述
    总结一下规律:
    只要有下降,那么一定就是其中一个峰点了,实在一个数组里没有任何下降的,那就是最后一个数字的下标

然后代码就可以出炉了:时间复杂度:O(N)

class Solution {
public:
//暴力求解
    int findPeakElement(vector<int>& nums) 
    {
        for(size_t i = 0; i < nums.size() - 1; i++)
        {
            //出现下降
            if(nums[i] > nums[i+1]) return i;
        }

        return nums.size() - 1;
    }
};

细节:i的取值:
小细节就是i的取值是小于size() - 1,也就是说最多取到倒数第二个数,原因就是里面用到了mid + 1,如果mid可以取到最后一个数,那么mid + 1就是越界访问了。

3.二分算法

这个题目显然是提示咱们用二分算法了:
在这里插入图片描述
至于为什么可以用二分算法呢?
答案是具有二段性:
在这里插入图片描述
所以,我们可以得出二分代码:

class Solution {
public:
//二分算法
    int findPeakElement(vector<int>& nums) 
    {
        int left = 0, right = nums.size() - 1;
        while(left < right)
        {
            int mid = left + (right - left) / 2;
            if(nums[mid] > nums[mid + 1]) right = mid;
            else left = mid + 1;
        }

        return left;
    }
};

4.总结

感觉这个题的二分重点是mid与其后面的一个数进行比较得结果,需要自己把握这一点才行。


EOF

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能AI愈发强大,企业如何防范AI网络钓鱼攻击

随着AI技术的快速发展&#xff0c;如ChatGPT等智能化工具在各个领域得到了广泛应用。然而&#xff0c;这些工具的普及也给网络安全带来了新的挑战。AI模型的自然语言生成功能使得网络钓鱼攻击更加智能化和隐蔽化&#xff0c;攻击者能够利用AI技术生成高度逼真的欺骗性邮件和其他…

银河麒麟操作系统下使用QT连接TiDB数据库开发步骤

目标:实现项目软件+硬件都运行在国产化操作系统平台上。 方法:在虚拟机中安装麒麟系统V10Sp1+Qt5.14.2+MySql8.0+TiDB软件,编译MySql驱动,测试连接TiDB数据库项目。 步骤: 1、使用虚拟机软件VMWare安装银河麒麟操作系统。 2、在银河麒麟系统上安装QT5.14.2软件。 3、…

2024年5月20日优雅草蜻蜓API大数据服务中心v2.0.4更新

v2.0.4更新 v2.0.4更新 2024年5月20日优雅草蜻蜓API大数据服务中心v2.0.4更新-增加ai绘画接口增加淘宝联想词接口底部增加联系方式 更新日志 底部增加联系方式 增加ai绘画接口 增加淘宝联想词接口 增加用户中心充值提示 用户中心内页颜色改版完成 截图 部分具体更新接口信…

算法练习第23天|131.分割回文串、93.复原IP地址

131.分割回文串 131. 分割回文串 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/palindrome-partitioning/description/ 题目描述&#xff1a; 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有…

23-LINUX--TCP连接状态

一.TCP服务的特点 传输层协议主要有两个&#xff1a;TCP 协议和 UDP协议。TCP 协议相对于UDP协议的特点是&#xff1a;面向连接、字节流和可靠传输。 使用TCP协议通信的双方必须先建立连接&#xff0c;然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源&a…

STM32_ADC

1、ADC简介 ADC&#xff0c;即Analog-Digital Converter&#xff0c;模拟-数字转换器。 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁。 12位逐次逼近型ADC&#xff0c;1us转换时间。 输入电压范围&#xff1a;0~3.3…

AHPPEBot:基于表型和姿态估计的自主番茄采摘机器人

论文&#xff1a;AHPPEBot: Autonomous Robot for Tomato Harvesting based on Phenotyping and Pose Estimation 作者&#xff1a;Xingxu Li, Nan Ma, Yiheng Han, Shun Yang, Siyi Zheng 收录&#xff1a;ICRA2024 编辑&#xff1a;东岸因为一点人工一点智能 AHPPEBot&am…

如何将Windows PC变成Wi-Fi热点?这里提供详细步骤

序言 Windows 10和Windows 11都有内置功能,可以将你的笔记本电脑(或台式机)变成无线热点,允许其他设备连接到它并共享你的互联网连接。以下是操作指南。 由于Windows中隐藏的虚拟Wi-Fi适配器功能,你甚至可以在连接到另一个Wi-Fi网络或无线路由器时创建Wi-Fi热点,通过另…

Mysql总结1

Mysql常见日志 &#xff08;1&#xff09;错误日志&#xff1a;记录数据库服务器启动、停止、运行时存在的问题&#xff1b; &#xff08;2&#xff09;慢查询日志&#xff1a;记录查询时间超过long_query_time的sql语句&#xff0c;其中long_query_time可配置&#xff0c;且…

【NumPy】关于numpy.genfromtxt()函数,看这一篇文章就够了

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

一款功能强大的安卓虚拟机应用——VMOS Pro使用分享

前段时间我刚刚分享一个WeChat平板模块能够允许用户自由修改系统设置&#xff0c;让你的Android备用手机焕发新生&#xff0c;实现手机PAD化&#xff0c;实现两台设备同时登录微信号。今天我分享的这个相比WeChat更为简单&#xff0c;因为它可以通过虚拟机的方式进行多种androi…

java文档管理系统的设计与实现源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的文档管理系统的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 文档管理系统的…

H4vdo 台湾APT-27视频投放工具

地址:https://github.com/MartinxMax/H4vdo 视频 关于 H4vdo RTMP lock 屏播放视频工具&#xff0c;可以向目标发送有效载荷&#xff0c;播放目标的屏幕内容。目标无法曹作计算机 使用方法 安装依赖 根据你的操作系统选择一个安装程序 RTMP 服务端 ./rtsp-simple-server.…

C语言学习笔记--运算符与表达式(7521字爆肝)

上午好&#xff0c;本来想上午改简历下午学习c语言的&#xff0c;但想了一下上午精力充沛还是用来学习比较好&#xff0c;虽然现在失业了&#xff0c;但住在我姨家有吃有住的&#xff0c;再次感谢我姨&#xff0c;我要抓紧时间修改简历&#xff0c;然后找个工作搬出去&#xff…

SpringBean-生命周期

Spirng Bean 元信息配置阶段 1 面向资源 xml配置&#xff08;很熟悉了不做讨论&#xff09;Properties配置 public class BeanMetaDemo {public static void main(String[] args) {DefaultListableBeanFactory factory new DefaultListableBeanFactory();PropertiesBeanDef…

vscode插件-06 Python

文章目录 Python(一般安装这一个就行)Pylance(跟随Python自动安装)Python Debugger(跟随Python自动安装)LiveCode for pythonSort linesPython Extension Pack(一般不安装)python snippets Python(一般安装这一个就行) 这个扩展是由微软官方提供的&#xff0c;支持但不仅限于以…

手撕C语言题典——轮转数组

目录 前言 一&#xff0c;思路 1&#xff09;暴力求解 O(N^2) 2&#xff09;三段逆置 二&#xff0c;代码实现 前言 随着C语言的深入&#xff0c;我们准备转向C方面学习&#xff0c;学习C之前我们需要搞懂时间复杂度&#xff0c;这个蛮重要的&#xff0c;我们将通过几个题…

RK3568笔记二十五:RetinaFace人脸检测训练部署

若该文为原创文章&#xff0c;转载请注明原文出处。 一、介绍 Retinaface是来自insightFace的又一力作&#xff0c;基于one-stage的人脸检测网络。RetinaFace是在RetinaNet基础上引申出来的人脸检测框架&#xff0c;所以大致结构和RetinaNet非常像。 官方提供两种主干特征提取网…

DVWA代码审计--文件上传

NO.1 Low 首先来看下代码 <?php if( isset( $_POST[ Upload ] ) ) { // Where are we going to be writing to? $target_path DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/"; $target_path . basename( $_FILES[ uploaded ][ name ] ); // Can we move the f…

u盘里文件损坏无法打开怎么恢复?五种方法恢复数据全解析

有时可能会遇到&#xff1a;插入U盘后&#xff0c;发现里面的文件损坏无法打开&#xff0c;有多种方法可以尝试来恢复损坏的文件。本文将介绍常见的方法解决U盘文件损坏无法打开的问题。 1. 使用文件修复工具 许多文件修复工具可以修复损坏文件。这些工具能够检测并修复文件中…