题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
- 解析:通过遍历整个数组找到最小值的方法还是属于找不到工作的方法?但因为是非递减排序的数组,所以对于有些情况,利用二分法得不到正确的答案,所以对于这种情况,做法还是遍历整个数组,找到最小值。
int minNumberInRotateArray(vector<int> rotateArray)
{
int len = rotateArray.size();
if (len == 0)
return 0;
int left = 0;
int right = len - 1;
int middle = 0;
while (rotateArray[left] >= rotateArray[right])
{
if (right - left == 1)
{
middle = right;
break;
}
middle = left + (right - left) / 2;
if (rotateArray[left] == rotateArray[right] && rotateArray[left] == rotateArray[middle])
{
return Midorder(rotateArray, left, right);
}
if (rotateArray[middle] >= rotateArray[right])
{
left = middle;
}
else if (rotateArray[middle] <= rotateArray[right])
{
right = middle;
}
}
return rotateArray[middle];
}
int Midorder(vector<int> &num, int left, int right)
{
int minnum = num[left];
for (int i = left + 1; i < right; i++)
{
if (num[i] < minnum)
minnum = num[i];
}
return minnum;
}