剑指offer之旋转数组的最小数字(C语言实现)
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。
题目分析:题目说的很清楚,输入的是递增排序的数组的一个旋转数组。我们把旋转数组分成两个部分,每一部分都是递增的,而且第一部分的最后一个元素一定大于第二部分的第一个元素。因此对数组相邻两个元素两两比较,若遇到前一个比后一个元素大的情况时,就得到了最小值并将其输出。没有遇到这种情况的话说明输入的数组是一个排好序的递增数组,直接将其第一个元素值返回即可。
函数实现:
int minArray(int* numbers, int numbersSize){
int i=0;
assert(numbers!=NULL);
if(numbersSize==0)
{
return -1;
}
for(i=0;i<numbersSize-1;i++)
{
if((numbers+i)>(numbers+i+1))
{
return *(numbers+i+1);
}
}
return numbers[0];
}