Find the length of unsorted subarray such that sorting this subarray can sort all the array. Print the start and end index.
public class Solution {
	public static void unsortedArrayIndex(int ar[]) {
		int i = 0;
		int j = ar.length - 1;
		boolean startIndex = true;
		boolean endIndex = true;
		int indexStart = -1;
		int indexEnd = -1;
		// finding position of unsorted array
		while (true) {
			if (ar[i] > ar[i + 1]) {
				if (startIndex) {
					indexStart = i + 1;
					startIndex = false;
				}
			}
			i++;
			if (ar[j] < ar[j - 1]) {
				if (endIndex) {
					indexEnd = j - 1;
					endIndex = false;
				}
			}
			j--;
			if (i > j || (!startIndex && !endIndex))
				break;
		}
		int max = Integer.MIN_VALUE;
		int min = Integer.MAX_VALUE;
		if (!startIndex || !endIndex) {
			// checking max and mean in unsorted array
			for (int k = indexStart; k <= indexEnd; k++) {
				if (max < ar[k]) {
					max = ar[k];
				}
				if (min > ar[k]) {
					min = ar[k];
				}
			}
			// checking if any index in left of array is larger than minimum of
			// unsorted array
			for (int k = 0; k < indexStart; k++) {
				if (ar[k] > min) {
					indexStart = k;
				}
			}
			// checking if any index in right of array is smaller than max of
			// unsorted array
			for (int k = ar.length - 1; k >= indexEnd; k--) {
				if (ar[k] < max) {
					indexEnd = k;
				}
			}
		}
		System.out.print(indexStart + " " + indexEnd);
	}
	public static void main(String[] args) {
		int[] arr = { 10, 12, 20, 30, 25, 40, 32, 31, 35, 50, 60 };
		unsortedArrayIndex(arr);
	}
}
Thanks and Regards
Solution Provided by Nilmani Prashanth

 

