思路比较简单,直接看代码即可:
/*求一个旋转字符串中最小值*/
/*思路:遇到没有旋转以及数组中相同位置元素相等的采用顺序查找*/
#include <iostream>
#include <exception>
#include <stdio.h>
using namespace std;
class Solution
{
public:
int find(int array[],int length)
{
int i=0, min = array[0];
while(i<length)
{
if(min > array[i])
min = array[i];
i++;
}
return min;
}
int findmin(int array[],int length)
{
if(!array || length <1)
throw new exception();
int lp = 0, rp =length -1;
int mid_index = lp;
while(array[lp] >= array[rp])
{
if(rp - lp == 1)
return array[rp];
else
{
mid_index =(lp + rp)/2;
if(array[lp] < array[rp] ||( (array[lp] == array[rp] )&& (array[lp] = array[mid_index])))
return find(array,rp - lp +1);
if(array[lp] > array[mid_index])
rp = mid_index;
else
lp = mid_index;
}
}
return array[mid_index];
}
};
int main()
{
Solution sol;
int array1[]= {1,2,3,4,5};
cout << "min :"<<sol.findmin(array1,5)<<endl;
int array2[] = {3,4,5,1,2};
cout << "min :"<<sol.findmin(array2,5)<<endl;
int array3[] = {5,1,2,3,4};
cout << "min: "<<sol.findmin(array3,5)<<endl;
system("PAUSE");
return 0;
}
运行结果: