LeetCode每日一题,GO语言写法-20210228

LeetCode每日一题,GO语言写法-20210228

题目描述

LC896. 单调数列
如果数组是单调递增或单调递减的,那么它是单调的。

如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的。 如果对于所有 i <= j,A[i]> = A[j],那么数组 A 是单调递减的。

当给定的数组 A 是单调数组时返回 true,否则返回 false。

示例 1:

输入:[1,2,2,3]
输出:true

示例 2:

输入:[6,5,4,4]
输出:true

示例 3:

输入:[1,3,2]
输出:false

示例 4:

输入:[1,2,4,5]
输出:true

示例 5:

输入:[1,1,1]
输出:true

提示:
1 <= A.length <= 50000
-100000 <= A[i] <= 100000

解题思路

一次遍历,比较A[i]与A[i-1]的大小,记录结果用于下一对元素的单调性的比较。

代码

func isMonotonic(A []int) bool {
    
    
	isIncrease := true
	isDecrease := true
	n := len(A)
	for i:=1;i<n;i++{
    
    
		if A[i-1] > A[i] && isDecrease {
    
    
			isIncrease = false
		} else if A[i-1]<A[i] && isIncrease {
    
    
			isDecrease = false
		} else if A[i-1]==A[i] {
    
    
			continue
		} else {
    
    
			return false
		}
	}
	return true
}

设置两个bool变量,isIncrease代表前一次比较数组是递增的(A[i-1]<=A[i]),isDecrease前一次比较数组是递减的(A[i-1]>=A[i],从1开始遍历数组A,比较A[i]和A[i-1]的大小,

  1. 如果 A[i-1] > A[i],并且isDecrease为true(在这里相当于A[i-2]>=A[i-1],即A[i-2]>=A[i-1]>A[i]),则可得目前数组单调递减,设置isIncrease为false;
  2. 如果 A[i-1] < A[i],并且isIncrease为true(在这里相当于A[i-2]<=A[i-1],即A[i-2]<=A[i-1]<A[i]),则可得目前数组单调递增,设置isIncrease为false;
  3. 如果 A[i-1] = A[i],则不影响之前递增或递减的判断,继续下一个值即可;
  4. 其余情况的讨论
    4.1 如果 A[i-1] > A[i],并且isDecrease为false,则可知A[i-2] < A[i-1],而A[i-1] > A[i],所以不单调
    4.2 如果 A[i-1] < A[i],并且isIncrease为false,则可知A[i-2] > A[i-1],而A[i-1] < A[i],所以不单调

猜你喜欢

转载自blog.csdn.net/wanghemlpoi/article/details/114239496