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

