
题目
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
public int (int[] array) { int left = 0; int right = array.length - 1; int mid = left;
while (array[left] >= array[right]){ if (right - left == 1) { mid = right; break; }
mid = (left + right) / 2;
if (array[mid] == array[left] && array[mid] == array[right]) return minInOrder(array, left, right); else if (array[mid] >= array[left]) left = mid; else if (array[mid] <= array[right]) right = mid; }
return array[mid]; }
private int minInOrder(int[] array, int left, int right){ int min = array[left];
for (int i = left + 1; i <= right; i++) min = Math.min(min, array[i]);
return min; }
|
近期评论