把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数

#include<iostream>
#include<vector>
using namespace std;

int MinInOrder(vector<int> rotateArray)
{
	int result = rotateArray[0];
	int index1 = 0;
	int index2 = rotateArray.size()-1;
	for(int i=index1+1;i<index2;++i)
	{
		if(result < rotateArray[i])
		{
			result = rotateArray[i];
		}
	}
	return result;
}
int minNumberInRotateArray(vector<int> rotateArray)//the answer of <<剑指offer>> : test run time:28 ms
{
	if(rotateArray.size() == 0 )
	return 0;
	int length = rotateArray.size();
	int index1 = 0;
	int index2 = length-1;
	int indexMid = index1;
	while(rotateArray[index1] >= rotateArray[index2])
	{
		if(index2 - index1 == 1)
		{
			indexMid = index2;
			break;
		}
		indexMid = (index2+index1)/2;
		if(rotateArray[index1] == rotateArray[index2] && rotateArray[indexMid] == rotateArray[index1])
		{
			return MinInOrder(rotateArray);
		}
		if(rotateArray[indexMid] >= rotateArray[index1])
			index1 = indexMid;
		else if(rotateArray[indexMid] <= rotateArray[index2])
			index2 = indexMid;
	}
	return rotateArray[indexMid];
}

/*
//code of myself    the code test time: 26 ms
int minNumberInRotateArray(vector<int> rotateArray)
{
	if(rotateArray.size() == 0)
		return 0;
	if(rotateArray.size() == 1)
		return rotateArray[0];
	int len = rotateArray.size();
	int i = 0;
	int min = rotateArray[0];
	int tmp;
	for(;i<len;++i)
	{
		tmp = rotateArray[i];
		if(tmp >rotateArray[i+1])
		{
			if(min > rotateArray[i+1])
			min = rotateArray[i+1];
			cout<<" circlu times = "<<i<<endl;
			return min;
		}
	}
	return min;
}
*/
int main()
{
	vector<int> vec;
	vec.push_back(3);
	vec.push_back(4);
	vec.push_back(5);
	vec.push_back(1);
	vec.push_back(2);
	cout<<"min = "<<minNumberInRotateArray(vec)<<endl;
		return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值