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],所以不单调
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值