首页 > 试题广场 >

寻找峰值

[编程题]寻找峰值
  • 热度指数:41153 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

山峰元素是指其值大于或等于左右相邻值的元素。给定一个输入数组nums,任意两个相邻元素值不相等,数组可能包含多个山峰。找到索引最大的那个山峰元素并返回其索引。

假设 nums[-1] = nums[n] = -∞。


提示:
1 <= 数组长度 <= 1000
0 <= 数组元素的值 <= 1000

如输入[2,4,1,2,7,8,4]时,会形成两个山峰,一个是索引为1,峰值为4的山峰,另一个是索引为5,峰值为8的山峰,如下图所示:

按题目要求应该输出索引最大的山峰,所以对应的输出为5。
示例1

输入

[2,4,1,2,7,8,4]

输出

5
示例2

输入

[3,2,1,2,1]

输出

3

说明

因有两个山峰,一个是索引为0,峰值为3的山峰,另一个是索引为3,峰值为2的山峰,按题目要求应该输出索引最大的山峰,所以对应的输出为3。 
/**
 * 寻找最后的山峰
 * @param a int整型一维数组 
 * @param aLen int a数组长度
 * @return int整型
 */
int solve(int* a, int aLen ) {
    // write code here
    int i,*p,max,num;
    p=a;
    max=0;
    for(i=0;i<aLen;i++)
       if(p[i-1]<p[i]&&p[i+1]<=p[i])
           num=i;
    return num;
}
发表于 2021-09-04 10:26:17 回复(0)
/**
 * 寻找最后的山峰
 * @param a int整型一维数组
 * @param aLen int a数组长度
 * @return int整型
 */
int solve(int* a, int aLen ) {
    // write code here
    int i=aLen-1,cnt=0;
    if(a[aLen-1] > a[aLen-2]) return(aLen-1);
    for(i=aLen-2;i>0;i--)
    {
        if(a[i]>a[i-1] && a[i]>a[i+1])
        {
            cnt=i;
            return(cnt);
        }
    }
    if(a[0] > a[1]) return(0);
    return(0);
}
发表于 2021-08-07 09:45:30 回复(0)

问题信息

上传者:牛客332641号
难度:
2条回答 6399浏览

热门推荐

通过挑战的用户

寻找峰值