feat(896-monotonic-array): better solution

This commit is contained in:
Sangeeth Sudheer 2022-02-28 21:03:29 +05:30
parent 1e76039c03
commit a8ffbb4c5d
1 changed files with 23 additions and 10 deletions

View File

@ -1,16 +1,29 @@
class Solution:
def isMonotonic(self, nums: List[int]) -> bool:
direction = 0
prev = nums[0]
# Means difference between two nums indicate that it is
# decreasing or that difference is 0
isNonIncreasing = True
for num in nums[1:]:
newDirection = num - prev
# Same idea as above butnopposite: it is either increasing
# or difference is 0
isNonDecreasing = True
if direction == 0:
direction = newDirection
elif direction < 0 < newDirection or direction > 0 > newDirection:
for i in range(1, len(nums)):
difference = nums[i] - nums[i - 1]
# We can say with confidence if this condition ever passes
# that sequence is increasing (e.g. 1 2 4 8 ...)
if difference > 0:
isNonIncreasing = False
# Sequence is decreasing (e.g. 1 0 -2 -4 ...)
elif difference < 0:
isNonDecreasing = False
# If both flags are set to False, that means there is no
# monotonous state and we can break early.
if not isNonIncreasing and not isNonDecreasing:
return False
prev = num
return True
# At the end, if either flag remains True, we have a montonous
# array
return isNonIncreasing or isNonDecreasing