LeetCode896. Monotonic Array ---Python三种思路

本文介绍了一种算法,用于判断一个数组是否为单调递增或单调递减。通过三种不同的方法实现,包括使用Python的all()函数进行直接比较,引入变量记录数组元素的变化趋势,以及维护历史值、当前值和下一个值来判断单调性。

题目描述:

An array is monotonic if it is either monotone increasing or monotone decreasing.

An array A is monotone increasing if for all i <= jA[i] <= A[j].  An array A is monotone decreasing if for all i <= jA[i] >= A[j].

Return true if and only if the given array A is monotonic.

Example 1: 

Input: [1,2,2,3]
Output: true

Example 2:

Input: [6,5,4,4]
Output: true

Example 3:

Input: [1,3,2]
Output: false

Example 4:

Input: [1,2,4,5]
Output: true

Example 5:

Input: [1,1,1]
Output: true

解题思路:

判断数组是否单调。

(1)采用Python的all()函数,直接暴力做,判断是否全部的A[i] <= A[i + 1]或A[i] >= A[i + 1]。

class Solution:
    def isMonotonic(self, A):
        """
        :type A: List[int]
        :rtype: bool
        """
        if (all(A[i]<=A[i+1] for i in range(len(A)-1))):
            return True

        elif (all(A[i]>=A[i+1] for i in range(len(A)-1))):
            return True
        else:
            return False

(2)引入两个变量up, down表示由A[i]到A[i+ 1]的增减。遍历数组,若up和down同时大于0,则说明一定不单调。

class Solution:
    def isMonotonic(self, A):
        """
        :type A: List[int]
        :rtype: bool
        """
        up, down = 0, 0
        for i in range(len(A) - 1):
            if A[i + 1] > A[i]:
                up += 1
            if A[i + 1] < A[i]:
                down += 1
        if up > 0 and down > 0:
            return False
        return True

(3)维护三个值,历史值,当前值和当前值的下一个值,用一个指针i,his表示历史值,A[i]表示当前值,A[i + 1]表示当前值的下一个值,若his == A[i],则指针继续走,直到找到一个A[i]和his不同,若A[i] == A[i + 1],指针同样继续,直至二者不同,则相当于去除了历史值,当前值,当前值的下一个值之间相同的数字,则可用斜率的方式来判断单调性。

class Solution:
    def isMonotonic(self, A):
        """
        :type A: List[int]
        :rtype: bool
        """
        if len(A) <= 2:
            return True
        i = 1
        his = A[0]
        while i < len(A) - 1:
            while his == A[i]:
                i += 1
                if i >= len(A) - 1:
                    return True
            while A[i + 1] == A[i]:
                i += 1
                if i >= len(A) - 1:
                    return True
            if (A[i + 1] - A[i]) * (A[i] - his) < 0:
                return False
            his = A[i]
            i += 1
        return True

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值