把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
/*此代码只体现思路*/
//分界点前后都是非递减数组,分界点后面的非递减数组比分界点前面的数组都要小,因此对旋转数组按顺序查找,
//当出现后一个数比前一个小时,这个数就是最小值,若没有出现后一个数比前一个数小的情况,这说明这个数组所有的数都相等,返回数组第一个数即可。注意考虑数组为空的情况,返回0
int GetMin(int* array,int len)
{
int index = 0;
if(array == NULL) return 0;
for(index; index < len-1; index++)
{
if(array[index+1] < array[index])
return array[index+1];
}
return array[0];
}
int main(void)
{
int array[] = {3,4,5,1,2}; //1
int array1[] = {3,3,3,3,3}; //3
int* array2 = NULL; //0
printf("GetMin = %d \r\n",GetMin(array2,sizeof(array2)/sizeof(array2[0])));
return 0;
}