题目描述:
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
解题思路:
方法一:旋转数组是将若干个元素搬到了数组的末尾,所以可以从最后向前查找,如果达到某一点的数比它的下一个数小了,那说明这个数就是这个数组中最小的(因为这个数组原本是非降序排列的,即使将若干个元素移到了后面,哪也是有数按需的,前面升序,后面降序)。
复杂度:O(n)
方法二:先对整个数组重新排序,再取第一个元素,即为最小值。
复杂度:O(n*logn)
C++实现代码:
方法一:
int minNumberInRotateArray(vector<int> rotateArray) {
if(rotateArray.size()==0)
{
return 0;
}
int minNumber=rotateArray[rotateArray.size()-1];
for(int i=rotateArray.size()-2;i>0;i--)
{
if(minNumber>=rotateArray[i])
{
minNumber=rotateArray[i];
}
else{
break;
}
}
return minNumber;
}
方法二:
int minNumberInRotateArray(vector<int> rotateArray) {
sort(rotateArray.begin(),rotateArray.end());
return rotateArray[0];
}