题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
——来源于《剑指offer》
-
简要思路:利用二分查找的思想,用首尾元素同中间元素比较。
-
代码实现
import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int[] array) {
if (array.length < 0 || array == null) {
throw new RuntimeException("数组不符合规范!");
}
int p1 = 0;
int p2 = array.length - 1;
int mid = 0;
while (array[p1] >= array[p2]) {
if (array[p1] == array[mid] && array[p2] == array[mid]) {
return minInOrder(array);
}
if (p1 + 1 == p2) {
mid = p2;
break;
}
mid = (p1 + p2) / 2;
if (array[mid] >= array[p1]) {
p1 = mid;
} else if (array[mid] <= array[p2]) {
p2 = mid;
}
}
return array[mid];
}
private int minInOrder(int[] array) {
int res = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i] < res) {
res = array[i];
}
}
return res;
}
}