目录
前言
本人刷剑指offer的一些程序记录,头文件,主函数都齐全,可直接上机运行
一、题目
把⼀个数组最开始的若⼲个元素搬到数组的末尾,我们称之为数组的旋转。 输⼊⼀个⾮递减排序的数组的⼀个旋转,输出旋转数组的最⼩元素。 例如:数组{3,4,5,1,2}
为
{1,2,3,4,5}
的⼀个旋转,该数组的最⼩值为
1
。
NOTE
:给出的所有元素都⼤于
0
,若数组⼤⼩为
0
,请返回
0
。
二、程序
1.头文件
#include <iostream>
#include <vector>
using namespace std;
2.类和主函数
class solution
{
public:
int MinRotateArray(vector<int> array)
{
if(array.size()==0) return 0;
int left=0;
int right=array.size()-1;
int mid=0;
while(array[left] >= array[right])
{
if(right-left==1)
{
mid=right;
break;
}
mid=left+(right-left)/2;
//特殊情况,原数组非递增也非递减
if(array[left]==array[right] && array[left]==array[mid])
return MinOrderArray(array,left,right);
if(array[mid]>=array[left]) left=mid;
else right=mid;
}
return array[mid];
}
private:
int MinOrderArray(vector<int> array,int left,int right)
{
int min=left;
for(int i=left+1;i<=right;i++)
{
if(array[min]>array[i]) min=i;
}
return array[min];
}
};
int main()
{
int n,data;
vector<int> array;
cout<<"请输入数组的初始长度:"<<endl;
cin>>n;
cout<<"请初始化数组"<<endl;
for(int i=0;i<n;i++)
{
cin>>data;
array.push_back(data);
}
cout<<"最小值为:"<<endl;
solution stu;
cout<<stu.MinRotateArray(array)<<endl;
}