Question : Find the minimum element in the rotated sorted array.
So for example we have sorted array as -
2,3,6,12, 15, 18.
Now suppose the array is rotated k times ( we don’t know k), such that array becomes
15, 18,2,3,6,12
Answer - The answer to this lies on the fact that if we can find the point on inflection and things will be simple. So if we can have 2 sub arrays A and B,
// always restrict the search to the unsorted
// sub-array. The min is always there.
public static int findMin(int\[\] a, int start, int end){
int mid = (start + end)/2;
if(start == mid){//only 1 element
return a\[mid+1\];
}else if(a\[start\] > a\[mid\]){
return findMin(a, start, mid);
}else if(a\[mid+1\] > a\[start\]){
return findMin(a, mid+1, end);
}
//else{
// return a\[mid+1\];
//}
}
To begin with we call findMin(array, 0, array.length-1).
Doing it iteratively:
// index of first element
l = 0
// index of last element.
h = arr.length - 1
// always restrict the search to the unsorted
// sub-array. The min is always there.
while (arr\[l\] > arr\[h\]) {
// find mid.
mid = (l + h)/2
// decide which sub-array to continue with.
if (arr\[mid\] > arr\[h\]) {
l = mid + 1
} else {
h = mid
}
}
// answer
return arr\[l\]