首页 > 试题广场 >

寻找峰值

[编程题]寻找峰值
  • 热度指数: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整型一维数组 
# @return int整型
#
class Solution:
    def solve(self , a ):
        # write code here
        n = len(a)
        res = -1 
        a.insert(0,-1)
        a.append(-1)
        for i in range(n+1):
            if a[i] > a[i-1] and a[i] > a[i+1]:
                res = i 
        return res -1

发表于 2022-02-19 15:49:57 回复(0)
class Solution:
    def solve(self , a ):
        mou = []
        #先解决列表尾
        if a[-1] > a[-2]:
            return len(a)-1
        #中间常规推算,倒着来,找到一个峰立马退出
        i = 2
        while(i<len(a)-1):
            if a[-i]>a[-i-1] and a[-i]>a[-i+1]:
                return len(a)-i
            i += 1
        #解决列表头
        if a[0] > a[1]:
            return 0

发表于 2021-08-15 15:58:41 回复(0)
class Solution:
    def solve(self , a ):
        # write code here
        n = len(a)
        if a[n-1] > a[n-2]:
            return n-1
        if a[0] > a[1]:
            return 0
        i = n-2
        while i > 0:
            if a[i-1] < a[i] and a[i+1]<a[i]:
                return i
            i -= 1

发表于 2021-08-14 22:27:50 回复(0)
class Solution:
    def solve(self , a ):
        # write code here
        j = 0
        for i in range(1,len(a)):
            if a[len(a)-1-i] >= a[len(a)-1-j]:
                j = j + 1
                return len(a)-1-j
            else:
                return len(a)-1
发表于 2021-08-11 01:00:02 回复(0)
class Solution:
    def solve(self , a ):
        #write code here
        #max_a = -1
        #out = -1
        #for i in range(len(a)-1,0,-1):
        #    if a[i] >= a[i-1]:
         #       out = i
         #       print(out,a[i])
        #return out
        #
        for i in range(len(a)-1,0,-1):
            if(a[i]>=a[i-1]):
                return i
发表于 2021-08-10 22:17:20 回复(0)
注意边界的处理
class Solution:
    def solve(self , a ):
        # write code here
        for i in range(len(a)-1,0,-1):
            if i == len(a)-1 and a[i] >= a[i-1]:
                return i
            elif i == 0 and a[i] >= a[i+1]:
                return i
            else:
                if a[i] >= a[i-1] and a[i] >= a[i+1]:
                    return i
        return -1

发表于 2021-08-04 19:14:47 回复(0)

问题信息

上传者:牛客332641号
难度:
7条回答 5548浏览

热门推荐

通过挑战的用户