LeetCode 581 – Python 3 (Week 5 – 01)

Solution 1

class Solution:
    def findUnsortedSubarray(self, nums: List[int]) -> int:
        
        snums = sorted(nums)
        right = 0 
        left = len(nums) - 1
        
        for i in range(len(nums)):
            if nums[i] != snums[i]:
                right = max(right, i)
                left = min(left, i)
                
        return 0 if right-left<=0 else right-left+1

Time complexity is O(nlog⁡n). Space complexity is O(n).

Solution 2

class Solution:
    def findUnsortedSubarray(self, nums: List[int]) -> int:
        
        maxnum = - float("inf")
        minnum = nums[len(nums) - 1]
        
        for i in range(1, len(nums) -1):
            if nums[i] < nums[i-1]:
                minnum = min(minnum, nums[i])
            
        i = len(nums) - 2    
        while i >= 0:
            if nums[i] > nums[i+1]:
                maxnum = max(maxnum, nums[i])
            i = i-1
        
        left = 0
        while left < len(nums):
            if nums[left] > minnum:
                break
            left = left + 1
         
        right = len(nums) - 1       
        while right >= 0:
            if nums[right] < maxnum:
                break
            right = right - 1
                
                
        return 0 if right-left<0 else right-left+1

Time complexity is O(n). Space complexity is O(1).

Leave a comment

Design a site like this with WordPress.com
Get started