【LeetCode: 2210. 统计数组中峰和谷的数量 + 模拟】

寻找一维数组的连续数值波峰波谷 如果当前状态为波谷,且当前元素大于其前后相邻元素,则认为找到了一个波峰,将其索引添加到波峰数组,并将状态变量更新为波峰。反之,如果当前状态为波峰,且当前元素小于其前后相邻元素,则认为找到了一个波谷,将其索引添加到波谷数组,并将状态变量更新为波谷。波峰指的是数组中相邻数值中的最大值,而波谷则是相邻数值中的最小值。可以根据实际需求对返回的波峰和波谷索引进一步进行处理,例如计算波峰和波谷之间的差值、统计波峰和波谷的个数等。接下来,我们将通过遍历数组的方式,找到数组中的连续波峰和波谷。开始时,初始状态设置为波谷。 阅读详情

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,优快云-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述
在这里插入图片描述

🚩 题目链接

⛲ 题目描述

给你一个下标从 0 开始的整数数组 nums 。如果两侧距 i 最近的不相等邻居的值均小于 nums[i] ,则下标 i 是 nums 中,某个峰的一部分。类似地,如果两侧距 i 最近的不相等邻居的值均大于 nums[i] ,则下标 i 是 nums 中某个谷的一部分。对于相邻下标 i 和 j ,如果 nums[i] == nums[j] , 则认为这两下标属于 同一个 峰或谷。

注意,要使某个下标所做峰或谷的一部分,那么它左右两侧必须 都 存在不相等邻居。

返回 nums 中峰和谷的数量。

示例 1:

输入:nums = [2,4,1,1,6,5]
输出:3
解释:
在下标 0 :由于 2 的左侧不存在不相等邻居,所以下标 0 既不是峰也不是谷。
在下标 1 :4 的最近不相等邻居是 2 和 1 。由于 4 > 2 且 4 > 1 ,下标 1 是一个峰。
在下标 2 :1 的最近不相等邻居是 4 和 6 。由于 1 < 4 且 1 < 6 ,下标 2 是一个谷。
在下标 3 :1 的最近不相等邻居是 4 和 6 。由于 1 < 4 且 1 < 6 ,下标 3 符合谷的定义,但需要注意它和下标 2 是同一个谷的一部分。
在下标 4 :6 的最近不相等邻居是 1 和 5 。由于 6 > 1 且 6 > 5 ,下标 4 是一个峰。
在下标 5 :由于 5 的右侧不存在不相等邻居,所以下标 5 既不是峰也不是谷。
共有 3 个峰和谷,所以返回 3 。
示例 2:

输入:nums = [6,6,5,5,4,1]
输出:0
解释:
在下标 0 :由于 6 的左侧不存在不相等邻居,所以下标 0 既不是峰也不是谷。
在下标 1 :由于 6 的左侧不存在不相等邻居,所以下标 1 既不是峰也不是谷。
在下标 2 :5 的最近不相等邻居是 6 和 4 。由于 5 < 6 且 5 > 4 ,下标 2 既不是峰也不是谷。
在下标 3 :5 的最近不相等邻居是 6 和 4 。由于 5 < 6 且 5 > 4 ,下标 3 既不是峰也不是谷。
在下标 4 :4 的最近不相等邻居是 5 和 1 。由于 4 < 5 且 4 > 1 ,下标 4 既不是峰也不是谷。
在下标 5 :由于 1 的右侧不存在不相等邻居,所以下标 5 既不是峰也不是谷。
共有 0 个峰和谷,所以返回 0 。

提示:

3 <= nums.length <= 100
1 <= nums[i] <= 100

🌟 求解思路&实现代码&运行结果


⚡ 模拟

🥦 求解思路
  1. 题目要求:统计数组中峰和谷的数量。峰是指某元素比左右相邻元素都大,谷是指某元素比左右相邻元素都小。相邻的重复元素只算一个峰或谷。
  2. 核心思路:
  • 跳过重复元素:遍历数组时,如果当前元素和前一个元素相同,直接跳过以避免重复计数。
  • 寻找有效左右边界:对于每个元素,向左找到第一个与它不同的元素(左边界);向右找到第一个与它不同的元素(右边界)。
  • 判断峰谷条件:如果当前元素大于左右边界元素,则为峰;如果当前元素小于左右边界元素,则为谷。
  1. 有了基本的思路,接下来我们就来通过代码来实现一下。
🥦 实现代码
class Solution {
    public int countHillValley(int[] nums) {
        int n = nums.length;
        if (n < 3)
            return 0;
        int cnt = 0;
        for (int i = 1; i < n - 1; i++) {
            // 跳过重复元素
            if (i > 1 && nums[i] == nums[i - 1])
                continue;

            int left = i - 1;
            // 找到左侧第一个不同的元素
            while (left > 0 && nums[left] == nums[i]) {
                left--;
            }

            int right = i + 1;
            // 找到右侧第一个不同的元素
            while (right < n - 1 && nums[right] == nums[i]) {
                right++;
            }

            // 判断峰和谷
            if (nums[i] > nums[left] && nums[i] > nums[right]) {
                cnt++;
            } else if (nums[i] < nums[left] && nums[i] < nums[right]) {
                cnt++;
            }
        }
        return cnt;
    }
}

在这里插入图片描述

💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

LAMMPS实战指南 - 从in文件到分子动力学模拟的完整流程解析 本文详细解析了LAMMPS分子动力学模拟的完整流程,从理解in文件的核心作用与基础结构开始,逐步指导如何创建模拟体系、选择势函数、进行能量最小化与初始化,并深入讲解了NVT/NPT系综弛豫与生产模拟的关键步骤。文章还提供了常见问题的避坑指南与实战技巧,帮助初学者快速掌握从编写in文件到成功运行模拟的全过程。 阅读详情

相关推荐

PADS导出PCB正反面丝印为CAD文件的方法

本文介绍如何将PADS绘制的pcb格式的PCB文件顶底层丝印及板框导出为CAD的dxf文件格式,并且将底层丝印进行镜像为正常视角

luguodeyo的博客 3291

Java谷值

谷值输入数组长度n,并输入n个数,统计数组中的谷值个数。(一个数若小于相邻的数则称为数组的谷值,若没有相邻的值也算谷值)输入用例:输出用例:输入用例:输出用例:输入用例:输出用例:......

weixin_62069241的博客 881

华为手环实时心率数据导出到UWP项目中

hello大家好呀O(∩_∩)O最近在做毕设 其中有个小功能要用到实时心率数据。查找网上的资料发现只有小米手环的实时心率数据导出但是没有华为手环的,我试了华为手环但是并不能行得通哈哈哈。现在分享一下华为手环实时心率数据导出的代码。

apple_63713858的博客 1581

6027. 统计数组中峰和谷的数量

给你一个下标从0开始的整数数组nums。如果两侧距i最近的不相等邻居的值均小于nums[i],则下标i是nums中,某个峰的一部分。类似地,如果两侧距i最近的不相等邻居的值均大于nums[i],则下标i是nums中某个谷的一部分。对于相邻下标i和j,如果nums[i] == nums[j], 则认为这两下标属于同一个峰或谷。 注意,要使某个下标所做峰或谷的一部分,那么它左右两侧必须都存在不相等邻居。 返回nums中峰和谷的数量。 示例...

stay hungry ! stay foolish! 724

Django 前后端分离实战:网络设备运维系统 - 从登录认证到业务模块

这篇文章分享了Django+Vue前后端分离开发网络设备运维系统的实战经验,重点介绍了登录认证、全局布局和设备管理三大模块的实现。文章包含以下核心内容: 登录模块实现:包括表单验证、Token认证、记住密码功能,以及美观的UI设计(渐变背景、毛玻璃效果) 全局布局架构:采用侧边栏+顶部导航的响应式设计,支持菜单权限控制和多设备适配 业务功能开发:详细展示了设备分类和部门管理的CRUD功能实现,包括列表展示、搜索过滤、分页等功能 常见问题解决:提供了5个开发中常见问题的解决方案,如Vue Router警告、C

qq_16766705的博客 525

数据结构与算法之数组寻找峰值&&分而治之

数据结构预算法之寻找峰值&&二分查找本质

weixin_73233099的博客 2411

FlexSim:FlexSim软件介绍与安装

在开始安装FlexSim之前,首先需要从FlexSim官方网站下载安装包。FlexSim提供不同版本的软件,包括教育版、专业版等,确保选择适合您需求的版本。下载页面通常会列出系统要求,包括操作系统、处理器、内存和硬盘空间,确保您的计算机满足这些要求。访问FlexSim官方网站。导航至下载页面。选择适合您需求的FlexSim版本。点击下载按钮,开始下载安装包。在开始构建模型之前,首先需要明确模型的目标。模型目标是指导模型设计和分析的核心,它定义了你希望通过模型解决的问题或探索的系统行为。

kkchenjj的博客 5801

数组中涉及的常见算法: 4、数组元素的排序算法(冒泡排序、快速排序)

数组元素的排序算法 排序的定义: 假设含有n个记录的序列为{R1,R2,…,Rn},其相应的关键字序列为{K1,K2,…,Kn}。将这些记录重新排序为{Ri1,Ri2,…,Rin},使得相应的关键字值满足条Ki1<=Ki2<=…<=Kin,这样的一种操作称为排序。 通常来说,排序的目的是快速查找。 衡量排序算法的优劣: 1.时间复杂度:分析关键字的比较次数和记录的移动次数...

qq_45766098的博客 432

后悔没早点知道!用AI只需四步,一次性讲清高质量论文引言写法(附公式+AI指令)

帮我写SCI 论文撰写引言的“研究背景与重要性”,要求从本研究所属领域的小背景切入,使用现在时态描述该领域的总体状况与发展趋势,突出其在学术研究、实际应用或社会层面的重要价值,并通过一个吸引人的钩子开头,如关键事实、现实问题或学术热点,引导读者关注本主题的重要性。梳理你所在领域和你研究相关的关键成果,但不能罗列所有文献,重点抓核心脉络,这部分最重要的实际上是让你了解别人的研究脉络,然后在每个关键的节点上,引用几篇关键参考文献作支撑,来体现你对领域的熟悉度就可以了。3)研究缺口模糊,没法突出问题的真实价值;

qq_64378896的博客 114

CollisionLoss 设计与实现原理说明

文章摘要 CollisionLoss是一种用于自动驾驶轨迹规划的碰撞惩罚损失函数,其核心思想是用多个沿车身纵轴排列的圆盘来近似表示车辆(Oriented Bounding Box)。该设计通过圆盘间的距离计算实现碰撞检测,具有以下特点: 可微性:圆盘距离计算处处可微,便于梯度回传,而传统矩形碰撞检测(分离轴定理)不可微且计算复杂。 多圆盘设计:沿车身纵向排列多个圆盘能更精确地拟合细长车体,避免单圆盘过度膨胀导致的误报。 安全覆盖:圆盘半径经过数学推导,确保完全覆盖车体矩形,避免漏检(宁可保守)。 软惩罚机制

@bangbang的博客 92

C# 数组求取多个峰值 与 谷值

int[] char1 = new int[] { 3, 3, 4, 5, 7, 4, 6, 1, 4, 13, 3, 7, 5, 7, 4, 6, 1, 4, 13, 3, 7 }; int leng_num = char1.Length; //求取峰谷值数组 int search_num = 4+1; //查找数量3 //峰值参数 int peak_variable = 0; /

weixin_39517767的博客 1193

ICC2:postmask ECO参考脚本

更多学习内容请关注「拾陆楼」知识星球。

m0_61544122的博客 881

golang力扣leetcode 第 285 场周赛

leetcode 第 285 场周赛前言第一题2210.统计数组中峰和谷的数量题解代码第二题2211.统计道路上的碰撞次数题解代码第三题2212.射箭比赛中的最大得分题解代码 前言 一共四题,AC三题,第四题线段树不搞acm了根本写不出来- -,懒得复习一遍了,就写三题的题解吧 第一题 2210.统计数组中峰和谷的数量 2210.统计数组中峰和谷的数量 题解 简单题,直接模拟就行了,不过题目中说的是左边第一个不相等和右边第一个不相等,相等的要跳过再去找,所有这里用两个for找出l和r 代码 func cou

清风 570

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

牛客-c语言刷题-寻找峰值

给定一个长度为n的数组nums,请你找到峰值并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个所在位置即可。3.对于所有有效的 i 都有 nums[i]!= nums[i + 1]1.峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于。2.假设 nums[-1] = nums[n] = −∞。4.你可以使用O(logN)的时间复杂度实现此问题吗?

_Herc的博客 477

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

寻找峰值

题目链接 题目: 峰值元素是指其值大于左右相邻值的元素。 给你一个输入数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。 你可以假设 nums[-1] = nums[n] = -∞ 。 题解一: 首先我们直接想到的就是遍历一遍,找到大于左右的两个数直接返回其索引。因为需要遍历数组,所以此时的时间复杂度为O(n)。 代码一: class Solution { public: int findPeakElement(vector<int

追梦少年ML的博客 496

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

基于波峰波谷法计算信号的周期

波峰波谷法原理是:查找信号相邻波峰波谷间隔采样点的数量,乘上采样间隔的时间,最后求平均值即是信号的周期。但该方法对噪声较为敏感,采用波峰波谷法计算滤波后信号的周期,如图所示。 该方法主要是需要找到信号的极大值和极小值,程序如下: function [max_p, max_v, min_p, min_v] = find_extrema(y) % find maximas % [tmp_v, tmp_p] = findpeaks(y); tmp_p = find(y(2:end-1)>y(1:e

JunJun 4409

【每日一题】排序子序列(波峰波谷问题)

排序子序列 文章目录排序子序列1、题目描述2、输入描述3、输出描述4、示例5、分析5.1 非递增非递减序列5.2 访问边界的确定5.2.1 越界问题5.2.2 波峰波谷问题6、代码7、总结 1、题目描述   牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序。牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列. 如样例所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少

Sunnyside_ 1771

python获取数组一部分_python如何取得二维数组局部峰值

展开全部#include#include#include#include#definemaxsize6//每个波形数据最大采集个数默认6typedefstructarray1{int*data;structarray1*next;}ARR1;ARR1*addNewArr(ARR1*arrHead,ARR1*arrTail);//插入一组波形数据节点...

weixin_39682673的博客 934

【数据结构与算法】查找波峰或者波谷

给定一个没有重复数字的数组,找出里面的波峰或者波谷,没有返回-1。如果有,那么波峰波谷的两侧是单调的。 思路是二分查找。返回的条件是找到的中间值比两边都大或者比两边都小。那么如果不满足就需要查找左边或者右边。在判断左右之前,我们需要先判断数组的类型,是包含波峰还是波谷,方法是检测前两个值,如果a[0]>a[1],那么是找波谷,否则找波峰。 下面只看波峰的情况,如果a[m-1] 这是存在波峰

u010900754的专栏 2万+

如何判断一维数组中是否存在一定高度的波峰_CFD/C++编程中的一些小技巧

记录一下个人在学习C++过程中学习到的小技巧,有些小问题对计算效率的影响真的很大,个人也没有经过专业的编程学习,总发现自己的程序在效率上跟商业软件甚至其他开源程序差距太大,因此把一些小技巧总结一下,跟大家分享。PS:所有程序在visual studio编译器的O2优化条件下编译1、内存读取CFD网格里面场量进行处理的时候,尽量按照存储的顺序对进行读取,不然同样的程序效率差距会非常大,具体看看下面对...

weixin_39712821的博客 280

C++求峰谷个数

void 求峰谷个数(int* a, int aa, int* aaa) {//缘由https://bbs.csdn.net/topics/395236094 int d = 1; while (d<aa - 1) if ((a[d]>a[d + 1] && a[d]>a[d - 1]) || (a[d]<a[d + 1] &&...

浤济的专栏 420

数组波峰 c语言,求数组中的两个波峰的值解决方案

C/C++ code#include #include #include using namespace std;#define MAX 1000void Search(double *value, int len){int first=0, second=0; //the objective x coordinate valuedouble max_val=value[0], sub_val...

weixin_39831104的博客 928

c语言寻峰算法,寻峰算法总结报告

闭合重峰、波峰定位、寻峰算法报告自动寻峰由于谱结构的复杂和统计涨落的影响,从谱中正确地找到全部存在的峰是比较困难的。尤其是找到位于很高本底上的弱峰,分辨出相互靠得很近的重峰更为困难。谱分析对寻峰方法的基本要求如下:(1) 比较高的重峰分辨能力。能确定相互距离很近的峰的峰位。(2) 能识别弱峰,特别是位于高本底上的弱峰。(3) 假峰出现的几率要小。(4) 不仅能计算出峰位的整数道址,还能计算出峰位的...

weixin_39947306的博客 3576

C语言寻找波峰值

如果不取消注释,就会找到相同值的波峰点,和Python对比可以发现,Python的是取中间的值作为波峰,我这里如果取消注释,则只取第一个作为波峰,如果需要中间的可以自行更改。判断是否是上升段(从左往右看),其中top_width是判断的取样长度,judg_rate相当于是一个阈值,因为波形并不是完全理想的。做到项目有需要压力采集的处理,为了便于在程序中计算采集的波形数据,这里简单写一个查找波峰的程序。然后是判断是否是波峰,依据就是前段上升,后段下降,并且是最大值。最后是一些变量的创建,以及测试数据。

CanEve的博客 1645

C++算法入门之数组找峰点(文件操作)

将文件中的数据读入到二维数组中,通过二维数组下标去判断元素与周围数的大小关系,思路简单,关键在于代码的积累上。类的一个函数,作用是把。类型,因为文件名被声明为。

qq_42595610的博客 597
上一篇: 【牛客: SQL202 查找当前薪水详情以及部门编号dept_no + 联表查询】
下一篇: 【LeetCode: 1358. 包含所有三种字符的子字符串数目 + 滑动窗口】
硕风和炜
硕风和炜 优质创作者: Java技术领域 优质创作者: Java技术领域
博客等级 码龄7年 2万+粉丝 1024原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕风和炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值