diff --git a/0896_monotonic-array/python3/solution.py b/0896_monotonic-array/python3/solution.py index 2866d25..80faa11 100644 --- a/0896_monotonic-array/python3/solution.py +++ b/0896_monotonic-array/python3/solution.py @@ -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 + + for i in range(1, len(nums)): + difference = nums[i] - nums[i - 1] - if direction == 0: - direction = newDirection - elif direction < 0 < newDirection or direction > 0 > newDirection: + # 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