【1】题目
【2】思路
(1)34512没有重复的类型的,二分查找法。
(2)110111,01重复类型的,顺序查找。
【3】代码
// Test3.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include<vector>
using namespace std;
//顺序查找
int select(vector<int> number)
{
if (number.empty())
{
throw new exception("vector invalid");
}
int min_value = number[0];
for (size_t i = 0; i < number.size(); i++)
{
int next_value = number[i];
if (next_value <= min_value)
{
min_value = next_value;
}
}
return min_value;
}
//旋转数组的最小数字
int MinValue(vector<int> number)
{
if (number.empty())
{
throw new exception("vector invalid");
}
int start = 0;
int end = number.size() - 1;
int media = int((start + end) / 2);
int minvalue;
while (start<=end)
{
//普通查找,递增数组的元素不同 ,34512
if ((end- start)<=1)
{
minvalue = number[end];
break;
}
//特殊查找,数组元素存在相同,111011
if (number[start]==number[media] && number[end] == number[media])
{
minvalue = select(number);
break;
}
media = int((start + end) / 2);
if (number[start]<=number[media] )
{
start = media;
}
else if(number[media] <= number[end])
{
end = media;
}
}
return minvalue;
}
void main()
{
vector<int> number1 = { 3,4,5,1,2 };
vector<int> number2 = { 1,1,0,1,1,1 };
int minvalue = MinValue(number2);
cout << minvalue << endl;
cin.get();
}