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

结果

相关推荐
max50060021 小时前
实时多模态电力交易决策系统:设计与实现
图像处理·人工智能·深度学习·算法·音视频
其古寺21 小时前
贪心算法与动态规划:数学原理、实现与优化
算法·贪心算法·动态规划
我爱996!21 小时前
LinkedList与链表
数据结构·链表
yb0os11 天前
RPC实战和核心原理学习(一)----基础
java·开发语言·网络·数据结构·学习·计算机·rpc
rit84324991 天前
基于灰狼算法(GWO)优化支持向量回归机(SVR)参数C和γ的实现
c语言·算法·回归
蒋士峰DBA修行之路1 天前
实验五 静态剪枝
数据库·算法·剪枝
蒋士峰DBA修行之路1 天前
实验六 动态剪枝
数据库·算法·剪枝
Tim_101 天前
【算法专题训练】20、LRU 缓存
c++·算法·缓存
hope_wisdom1 天前
C/C++数据结构之栈基础
c语言·数据结构·c++··stack
B612 little star king1 天前
力扣29. 两数相除题解
java·算法·leetcode