rotate the smallest number in an array
Problem Description: move a number of elements at the beginning of an array to the end of the array, which we call the rotation of the array.
Enter a rotation of a non-descending sorted array, outputting the smallest element of the rotated array.
For example , the array {3,4,5,1,2} is a rotation of {1,2,3,4,5}, and the minimum value of the array is 1.
Note: All elements given are greater than 0, and if the array size is 0, return 0.
Method 1:
By iterating through the array over and over, you can find the smallest data element. The time complexity of this idea is obviously O (n).
Disadvantage: There is no use of the properties of the rotated array.
Method 2:
After rotation the array can be divided into two ordered sub-arrays, and the preceding sub-array is greater than or equal to the subsequent sub-array. The smallest element is just the dividing line of these two sub-arrays.
The code is as follows:
/**
* Created by admin on 2017/2/25.
*/
public class Rotateminnumber {
public static void Main (string[] args) {
int arr[] = {3, 4, 5, 1, 2};//rotation array
The smallest number of rotation array, test = new rotation array, minimum number ();
System.out.println (Test.minnumberinrotatearray (arr));
}
public int Minnumberinrotatearray (int[] array) {
int begin = 0;
int end = Array.length-1;
int middle = begin;
if (Array.Length = = 0) {
return 0;
}
while (Array[begin] >= array[end]) {
if (End-begin = = 1) {
middle = end;
break;
}
Middle = (begin + End)/2;
if (Array[middle] >= Array[begin]) {
begin = middle;
} else if (Array[middle] <= array[end]) {
end = Middle;
}
}
return array[middle];
}
}