581. Shortest Unsorted Continuous Subarray - TengnanYao/daily_leetcode GitHub Wiki

class Solution(object):
    def findUnsortedSubarray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        n = len(nums)
        i, j = 0, n - 1
        while i < n - 1:
            if nums[i + 1] < nums[i]:
                break
            i += 1
        while j > 1:
            if nums[j] < nums[j - 1]:
                break
            j -= 1
        if i > j:
            return 0
        a, b = min(nums[i: j + 1]), max(nums[i: j + 1])
        return bisect_left(nums[j : ], b) + j - bisect_right(nums[ : i], a)
    
        # sorted
        s = sorted(nums)
        if s == nums:
            return 0
        n = len(nums)
        i, j = 0, n - 1
        while i < n:
            if nums[i] != s[i]:
                break
            i += 1
        while j > 0:
            if nums[j] != s[j]:
                break
            j -= 1
        return j - i + 1