题目
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
心得
小小题目大变化,边界测试少不得,处处留心得永生
代码
/**
特殊情况:0111111
旋转为
1101111
这个时候下面的算法就不能使用,就需要使用顺序查找法
*/
import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int [] array) {
if (array.length == 0)
return 0;
int start = 0, end = array.length - 1;
int middle = start; // 这个用来处理不旋转的数组
while (array[start] >= array[end]) {
if (end == start + 1) {
middle = end;
break;
}
middle = (start + end) / 2;
//这个用来处理上面提到的特殊案例
if (array[start] == array[end] && array[end] == array[middle])
return minInOrder(array, start, end);
if (array[start] <= array[middle]) {
start = middle;
}
else if (array[middle] <= array[end]) {
end = middle;
}
}
return array[middle];
}
public int minInOrder (int[] array, int start, int end) {
int result = array[start];
for (int i = start; i <= end; i++) {
if (result > array[i])
result = array[i];
}
return result;
}
}