LeetCode896 单调数列 golang实现

2021-02-28  本文已影响0人  lucasgao

896. 单调数列

方法1

image.png

解题思路

  1. 先判断递增还是递减
  2. 然后再依次判断后续是否为单调

notice:

  1. 数据越界
  2. 前两个元素可能相等

代码

func isMonotonic(A []int) bool {
    i := 0
    up := false
    for ;i<len(A)-1;i++{
        if A[i]==A[i+1]{
            continue
        }
        if A[i]>A[i+1]{
            up = false
        }else{
            up = true
        }
        break
    }

    return isMonotonic2(A[i:],up)
}

func isMonotonic2(A []int,up bool)bool{
    if up{
        for i:=1;i<len(A);i++{
            if A[i]<A[i-1]{
                return false
            }
        }
    }else{
        for i:=1;i<len(A);i++{
            if A[i]>A[i-1]{
                return false
            }
        }
    }
    return true
}

方法2

第一种代码量比较多,第二种实现

解题思路

使用2个标志位,up ,down 分别标志数组是递增还是递减。
当数组是相等的时候,up 和down 均为true。

然后采用反向标记, 如果轮询到递增则 downfalse,反之亦然

代码

/**

*/
func isMonotonic(A []int) bool {
    up,down := true,true // 默认情况下,既是递增也是递减
    for i:=1;i<len(A);i++{
        if A[i]>A[i-1]{ // 后面的比前面的大,则一定不是递减
            down = false
        }else if A[i]<A[i-1]{ // 后面的比前面的小,则一定不是递增
            up = false
        }
    }
    return up || down
}

上一篇 下一篇

猜你喜欢

热点阅读