分析
输入:一个递增数列,旋转之后的数组,
输出:该数组中的最小元素
思路–1
不用理会输入数组的顺序,直接寻找最小的元素,然后输出。
思路–2
既然题目给我们的是一个旋转过后的递增数组,我们也可以旋转回去
然后输出该数组中的第一个元素其实这样的操作麻烦了一下, 因为当你找到旋转的位置时,就已经找到最小的元素。(我只是想回顾一下原地旋转数组的算法)
public int minArray(int[] numbers) {
int min = 0 ;
/**
*旋转后的数组,大致的趋势是递增的,找到该数组不在递增的位置,既是
*旋转的位置
*/
for(int i=0;i<numbers.length;i++)
{
if(numbers[min]>numbers[i])
min = i;
}
//先将前半段旋转一次
conver(0,min-1,numbers);
//然后将后半段旋转一次
conver(min,numbers.length-1,numbers);
//最后将整个数组旋转一次,然后得到原始的数组
conver(0,numbers.length-1,numbers);
//返回第一个元素
return numbers[0];
}
//原地旋转数组的算法
public static void conver( int index,int end,int [] numbers)
{
int i = index;
int j = end;
while(i<j)
{
int temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
i++;
j--;
}
}