题目
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
#includeusing namespace std;class Solution{ public: int find_min_elem(int a[],int len); int min_order(int a[],int left,int right);};int Solution::find_min_elem(int a[],int len){ if(a==nullptr||len<=0) return -1; int left=0; int right=len-1; int middle=left; while(a[left]>=a[right]) { if(right-left==1) { return a[right]; break; } int middle=(left+right)/2; //特殊测试。 a[left]==a[right]&&a[left]==a[middle]三值相等。只能顺序查找 if(a[left]==a[right]&&a[left]==a[middle]) return min_order(a,left,right); if(a[left] a[i]) res=a[i]; } return res;}int main(){ Solution s; int a[]={ 1,0,1,1,1}; int res=s.find_min_elem(a,sizeof(a)/sizeof(a[0])); if(res<0) cerr<<"error"<