package com.interview.array; /** *http://www.geeksforgeeks.org/minimum-length-unsorted-subarray-sorting-which-makes-the-complete-array-sorted/ */ public class MinimumSortedWhichSortsEntireArray { public int minLength(int arr[]){ int i=0; while(i < arr.length -1 && arr[i] < arr[i+1]){ i++; } if(i == arr.length-1){ return 0; } int j = arr.length-1; while(j > 0 && arr[j] > arr[j-1]){ j--; } int max = Integer.MIN_VALUE; int min = Integer.MAX_VALUE; for(int k = i; k <= j; k++){ if(max < arr[k]){ max = arr[k]; } if(min > arr[k]){ min = arr[k]; } } int x = i-1; while(x >=0){ if(min > arr[x]){ break; } x--; } int y = j +1; while(y < arr.length){ if(max < arr[y]){ break; } y++; } return y -x -2 + 1; } public static void main(String args[]){ int arr[] = {4,5,10,21,18,23,7,8,19,34,38}; int arr1[] = {4,5,6,12,11,15}; int arr2[] = {4,5,6,10,11,15}; MinimumSortedWhichSortsEntireArray msw = new MinimumSortedWhichSortsEntireArray(); System.out.println(msw.minLength(arr1)); } }