2951. 找出峰值

找出数组中的峰值

给你一个下标从 0 开始的数组 mountain 。你的任务是找出数组 mountain 中的所有 峰值

以数组形式返回给定数组中 峰值 的下标,顺序不限 。

注意

  • 峰值 是指一个严格大于其相邻元素的元素。
  • 数组的第一个和最后一个元素 是峰值。

示例 1

输入mountain = [2,4,4]
输出[]
解释mountain[0]mountain[2] 不可能是峰值,因为它们是数组的第一个和最后一个元素。mountain[1] 也不可能是峰值,因为它不严格大于 mountain[2]。因此,答案为 []

示例 2

输入mountain = [1,4,3,8,5]
输出[1,3]
解释mountain[0]mountain[4] 不可能是峰值,因为它们是数组的第一个和最后一个元素。mountain[2] 也不可能是峰值,因为它不严格大于 mountain[3]mountain[1]。但是 mountain[1]mountain[3] 严格大于它们的相邻元素。因此,答案是 [1,3]

提示

  • 3 <= mountain.length <= 100
  • 1 <= mountain[i] <= 100

代码

c 复制代码
int* findPeaks(int* mountain, int mountainSize, int* returnSize) {
    int* res = (int*)malloc(sizeof(int) * (mountainSize - 2));
    *returnSize = 0;
    for (int i = 1; i < mountainSize - 1; i++)
    {
        if(mountain[i] > mountain[i-1] && mountain[i] > mountain[i+1])
        {
            res[(*returnSize)] = i;
            (*returnSize)++;
        }
    }
    return res;
}

代码分析

  1. 函数参数

    • int* mountain: 指向表示山脉的数组的指针。
    • int mountainSize: 数组的大小。
    • int* returnSize: 返回结果数组的大小。
  2. 变量初始化

    • int* res = (int*)malloc(sizeof(int) * (mountainSize - 2)): 为存储峰值下标的结果数组分配内存。结果数组的大小不会超过 mountainSize - 2
    • *returnSize = 0: 初始化返回结果数组的大小为 0。
  3. 遍历数组

    • for (int i = 1; i < mountainSize - 1; i++): 从数组的第二个元素遍历到倒数第二个元素。
  4. 检查峰值条件

    • if(mountain[i] > mountain[i-1] && mountain[i] > mountain[i+1]): 如果当前元素严格大于其相邻元素,则将其下标存入结果数组,并增加返回结果数组的大小。
  5. 返回结果

    • return res: 返回存储峰值下标的结果数组。

复杂度分析

  • 时间复杂度:O(n)

    • 该算法仅需遍历一次数组,因此时间复杂度为 O(n),其中 n 是数组 mountain 的长度。
  • 空间复杂度:O(n)

    • 该算法使用了一个额外的数组来存储峰值下标,因此空间复杂度为 O(n),其中 n 是数组 mountain 的长度。

结果

相关推荐
格林威1 小时前
常规线扫描镜头有哪些类型?能做什么?
人工智能·深度学习·数码相机·算法·计算机视觉·视觉检测·工业镜头
程序员莫小特3 小时前
老题新解|大整数加法
数据结构·c++·算法
小刘max4 小时前
深入理解队列(Queue):从原理到实践的完整指南
数据结构
过往入尘土4 小时前
服务端与客户端的简单链接
人工智能·python·算法·pycharm·大模型
zycoder.4 小时前
力扣面试经典150题day1第一题(lc88),第二题(lc27)
算法·leetcode·面试
蒙奇D索大4 小时前
【数据结构】考研数据结构核心考点:二叉排序树(BST)全方位详解与代码实现
数据结构·笔记·学习·考研·算法·改行学it
洲覆4 小时前
C++ 模板、泛型与 auto 关键字
开发语言·数据结构·c++
MoRanzhi12035 小时前
15. Pandas 综合实战案例(零售数据分析)
数据结构·python·数据挖掘·数据分析·pandas·matplotlib·零售
智驱力人工智能5 小时前
工厂抽烟检测系统 智能化安全管控新方案 加油站吸烟检测技术 吸烟行为智能监测
人工智能·算法·安全·边缘计算·抽烟检测算法·工厂抽烟检测系统·吸烟监测
程序员爱钓鱼5 小时前
Go语言实战案例——进阶与部署篇:编写Makefile自动构建Go项目
后端·算法·go