面试题8_旋转数组的最小值

来源:互联网 发布:淘宝商城裂帛 编辑:程序博客网 时间:2024/05/17 20:34

面试题8_旋转数组的最小值


//面试题8:旋转数组中的最小数//给定一个旋转数组,求出其中的最小值。//旋转数组的定义:把一个数组最开始的若干个元素搬到该数组的末尾。//例如:输入一个递增排序的数组{1,2,3,4,5}的一个旋转数组是{3,4,5,1,2},//其中最小数字是1。#include<iostream>#include<vector>using namespace std;bool g_InputInvalid=false;class Solution{public:int MinOrder(int num[], int p1, int p2){int result=num[p1];for(int i=p1+1; i<=p2; ++i){if(num[i]<result)result=num[i];}return result;}int FindMin(int num[], int length){if(num==nullptr || length<=0){g_InputInvalid=true;return 0;}//使用二分查找int p1=0;int p2=length-1;int indexmin=p1;while(num[p1]>=num[p2]){if(p2-p1 == 1){indexmin=p2;break;}indexmin=(p1+p2)/2;if(num[p1]==num[indexmin] && num[p2]==num[indexmin])return MinOrder(num,p1,p2);else if(num[indexmin]>=num[p1])p1=indexmin;else if(num[indexmin]<num[p2])p2=indexmin;}return num[indexmin];}};int main(void){int num[]={3,4,5,1,2};//int num[]={1,1,1,1,1};//int num[]={1,2,3,4,5};//int num[]={1,0,1,1,1};//int num[]={1,1,1,0,1};Solution object;int minnumber=object.FindMin(num,5);cout<<minnumber<<endl;system("pause");return 0;}



原创粉丝点击