题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为旋转。 输入一个递增的排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组array{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小元素为1.
m等于i与j和的一半
如图所示,设置这样三个下标,有三种情况
1.当array[m]>array[j]时,i=m+1
2.当array[m]<array[j]时,j=m,此时i也等于了j,因此跳出循环,表明找到目标值
3.当array[m]=array[j]时,j--;
具体代码如下
public static int reverseArrayFindminnumber(int[] numbers)
{
int i = 0;
int j = numbers.Length-1;
while (i < j)
{
int m = (i + j) / 2;
if (numbers[m] > numbers[j])
{
i = m + 1;
}
else if (numbers[m] < numbers[j])
{
j = m;
}
else j--;
}
return numbers[i];
}