JSMS19-旋转数组的最小数-剑指offer08

118 阅读1分钟

题目:把若干个元素搬到数组的末尾,我们称之为旋转数组。查找旋转数组中的最小数

例如:{7,8,9,1,2,3,4,5,6}这是一个旋转数组,最小数为1 {1,2,3,4,5,6,7,8,9}

分析:如果遍历一遍事件复杂度为O(N),可以选择采用二分查找的方式来查找O(logN)的时间复杂度。

#include <stdio.h>

int TheArray(int *a,int len) 
{
	int front,rear,mid;
	front=0;
	rear=len-1;
	while(a[front]>=a[rear])
	{
		if(rear-front==1)
		{
			mid=rear;
			break;	
		}	
		mid=(front+rear)/2;
		if(a[mid]>=a[front])
		{
			front=mid;
		}else if(a[mid]<=a[rear])
		{
			rear=mid;
		}
	}	
	return a[mid];
}

int main()
{
	int a[]={4,5,6,7,8,9,1,2,3};
	int  len=sizeof(a)/sizeof(a[0]);
	int ret=TheArray(a,len); 
	printf("%d\n",ret);
}