Brute Force

class Solution:
    def check(self, nums: List[int]) -> bool:
        """ tc O(N)  sc O(1)
        """
        fst = nums[0]
        end = nums[-1]
        brk = None
        inc = True
        for i in range(1,len(nums)):
            if nums[i] < nums[i-1]:
                if inc:
                    brk = nums[i-1]
                    inc = False
                else:
                    return False
        # not brk mean it's sorted ; end<= fst is to prove it's rotated 
        return True if not brk or end <= fst else False 
                    
                

Optimization

class Solution:
    def check(self, nums: List[int]) -> bool:
        """ tc O(N)  sc O(1)
        main idea: cnt cases where num[i-1] > num[i], since most cases will be <=. if cnt == 0, means sorted, if cnt == 1, means rotated 
        """
        cnt = 0
        n = len(nums)
        if n == 1:
            return True 
        for i in range(1,n):
            if nums[i-1] > nums[i]:
                cnt += 1

        if nums[-1] > nums[0]:
            cnt += 1
        return cnt <= 1