旋转数组的最小数字
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
Python 版本最终提交
看别人的 C/C++ 答案那么长, 结果 Python 就一行, 果然还是得自己用 C 重写
class Solution:
def minNumberInRotateArray(self, rotateArray):
# write code here
return min(rotateArray)
C/C++ 版本最终提交
根据二分查找改编的, 思路是参考剑指 Offer 里给的
class Solution {
public:
int minNumberInRotateArray(vector<int> rotateArray)
{
if (rotateArray.size() > 0)
{
int low, high, middle;
low = 0;
high = rotateArray.size() - 1;
middle = low;
// 结束条件
while (rotateArray[low] >= rotateArray[high])
{
// 结束条件
if (high - low == 1)
{
middle = high;
break;
}
// 求取中间的索引值
middle = (low + high) / 2;
// 判断中间值的大小, 知道它是前面的递增序列还是后面的递增序列
if (rotateArray[middle] <= rotateArray[high])
{
high = middle;
}
else if (rotateArray[middle] >= rotateArray[low])
{
low = middle;
}
}
return rotateArray[middle];
}
return 0;
}
};
Last updated
Was this helpful?