Find the Minimum length Unsorted Subarray, sorting which makes the complete array sorted in Python


Suppose we have a given unsorted array A[0..n-1] of size n, we have to find the minimum length subarray A[s..e] so that by sorting this subarray the whole array will be sorted. So, if the array is like [2,6,4,8,10,9,15], then the output will be 5. The subarray will be [6,4,8,10,9].

To solve this, we will follow these steps −

  • res := sort the nums as an array

  • ans := 0

  • set r as a linked list

  • for i in range 0 to length of res

    • if nums[i] is not same as res[i], then insert i into the r

  • if length of r is 0, then return 0, if length of r is 1, then return 1

  • return last element of r – first element of r + 1

Example 

Let us see the following implementation to get better understanding −

 Live Demo

class Solution(object):
   def findUnsortedSubarray(self, nums):
      res = sorted(nums)
      ans = 0
      r = []
      for i in range(len(res)):
         if nums[i] != res[i]:
            r.append(i)
      if not len(r):
         return 0
      if len(r) == 1:
         return 1
      return r[-1]-r[0]+1
ob1 = Solution()
print(ob1.findUnsortedSubarray([2,6,4,8,10,9,15]))

Input

[2,6,4,8,10,9,15]

Output

5

Updated on: 20-Aug-2020

264 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements