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 的长度。

结果

相关推荐
sz66cm10 分钟前
算法基础 -- 小根堆构建的两种方式:上浮法与下沉法
数据结构·算法
緈福的街口13 分钟前
【leetcode】94. 二叉树的中序遍历
算法·leetcode
顾小玙44 分钟前
数据结构进阶:AVL树与红黑树
数据结构
小刘要努力呀!44 分钟前
嵌入式开发学习(第二阶段 C语言基础)
c语言·学习·算法
野曙2 小时前
快速选择算法:优化大数据中的 Top-K 问题
大数据·数据结构·c++·算法·第k小·第k大
Codeking__2 小时前
”一维前缀和“算法原理及模板
数据结构·算法
休息一下接着来2 小时前
C++ 条件变量与线程通知机制:std::condition_variable
开发语言·c++·算法
Code哈哈笑2 小时前
【机器学习】支持向量回归(SVR)从入门到实战:原理、实现与优化指南
人工智能·算法·机器学习·回归·svm
努力学习的小廉2 小时前
【C++】 —— 笔试刷题day_29
开发语言·c++·算法
小羊在奋斗2 小时前
【LeetCode 热题 100】搜索插入位置 / 搜索旋转排序数组 / 寻找旋转排序数组中的最小值
算法·leetcode·职场和发展