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