leetcode 896. 單調數列 – python
題目:
如果數組是單調遞增或單調遞減的,那麼它是單調的。
如果對於所有 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
分析:
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