首页 > 试题广场 >

最长山脉

[编程题]最长山脉
  • 热度指数:911 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个长度为 n 的正整数数组,每个元素表示一座山的高度。
其中满足以下条件的连续子数组称为山脉:
1.长度大于等于3
2.存在下标 i ,满足 nums[0] < nums[1] < nums[2] < ... < nums[i] , nums[i] > nums[i+1] > nums[i+2] ... > nums[i+k]
请你找出最长山脉的长度

数据范围: , 数组中的元素满足
示例1

输入

[2,5,2,1,5]

输出

4

说明

 [2,5,2,1] 
示例2

输入

[2,2,2,2,1]

输出

0

说明

没有山脉则输出 0 
package main
//import "fmt"

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @return int整型
*/
func longestmountain( nums []int ) int {
    max:=0
    for i,x:=range nums{
        if i!=0&&i!=len(nums)-1{
            if x>nums[i-1]&&x>nums[i+1]{
                tot:=1
                l,r:=i-1,i+1
                lv,rv:=x,x
                for l>=0&&nums[l]<lv{
                    tot++
                    lv=nums[l]
                    l--
                }
                for r<len(nums)&&nums[r]<rv{
                    tot++
                    rv=nums[r]
                    r++
                }
                if tot>max{
                    max=tot
                }
            }
        }
    }
    return max
}

发表于 2023-03-29 09:01:56 回复(0)