牛客网剑指offer解题报告–求旋转数组最小值
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
快捷键
代码块
代码块语法遵循标准markdown代码,例如:
public static void main(String[] args) {
int[] array = new int[]{6,6,1};
int head = 0;
int tail = array.length-1;
while (tail - head > 1) {
// 去除重复的
while (array[tail] == array[tail - 1] && tail > head) {
tail--;
}
while (array[head] == array[head + 1] && tail > head) {
head++;
}
// 如果头小尾大,证明是正序的
if (array[head] < array[tail]) {
System.out.println(array[head]);
}
int mid = head + (tail - head)/2;
// 根据mid 找出逆序段。考虑mid和head相等的情况。此时tail和head只差1
if (array[mid] < array[head] && mid != head) {
tail = mid;
} else {
head = mid;
}
}
System.out.println(Math.min(array[head], array[tail]));
}