941 有效的山脉数组-简单

给定一个整数数组 arr,如果它是有效的山脉数组就返回 true,否则返回 false。

让我们回顾一下,如果 arr 满足下述条件,那么它是一个山脉数组:

arr.length >= 3 在 0 < i < arr.length - 1 条件下,存在 i 使得: arr[0] < arr[1] < ... arr[i-1] < arr[i] arr[i] > arr[i+1] > ... > arr[arr.length - 1]

算法分析:

// date 2020/05/20
func validMountainArray(arr []int) bool {
    n := len(arr)
    if n < 3 { return false }
    top, index := arr[0], 0
    // 找到最高峰
    for i := 1; i < n; i++ {
        if arr[i] == arr[i-1] { return false } // 不能有平的
        if arr[i] > top {
            top = arr[i]
            index = i
        }
    }
    // 判断是否是斜坡
    if index == 0 || index == n-1 {
        return false
    }
    // 判断上坡
    for i := 1; i < index; i++ {
        if arr[i-1] >= arr[i] {
            return false
        }
    }
    // 判断下坡
    for i := index+1; i < n; i++ {
        if arr[i-1] <= arr[i] {
            return false
        }
    }
    return true
}

最后更新于