LeetCode 896.單調數列 -- python

leetcode 896. 單調數列 – python

題目:

如果數組是單調遞增或單調遞減的,那麼它是單調的

如果對於所有 i <= jA[i] <= A[j],那麼數組 A 是單調遞增的。 如果對於所有 i <= jA[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. 1 <= A.length <= 50000
  2. -100000 <= A[i] <= 100000

分析:

trick: 先通過A[-1] - A[0]判斷是遞增還是遞減。

兩種解法,最後結果差不多,一個80ms 一個76ms。第一種代碼簡介清晰,第二種在遍歷的過程中一旦發現A[i + 1]- A[i] 與 A[-1]-A[0] 符號相反,立即返回False。從速度方面考慮,更傾向第二種。

第一種: 直接用python的內置函數sorted對列表排序,通過判斷排序後結果和原列表是否一致來判斷是否爲單調函數。

class Solution(object):
    def isMonotonic(self, A):
        """
        :type A: List[int]
        :rtype: bool
        """
        flag = A[-1] - A[0]
        
        if flag > 0 :
            return A == sorted(A)
        if flag <= 0:
            return A == sorted(A, reverse = True)

第二種:遍歷A中元素

class Solution(object):
    def isMonotonic(self, A):
        """
        :type A: List[int]
        :rtype: bool
        """
        flag = A[-1] - A[0]
        
        if flag > 0 :
            for i in range(len(A) - 1):
                if A[i + 1] < A[i]:
                    return False
        if flag <= 0:
            for i in range(len(A) - 1):
                if A[i + 1] > A[i]:
                    return False
        return True
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章