一、题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
解题思路:
- 针对原始的非递减数组如{1,2,3,4,5}进行旋转之后得到{3,4,5,1,2},可发现旋转之后的数组在绝大多数数位置仍然为非递减排列(即后一个数字比前一个数组大).
- 但只在一个位置不满足,该位置即为原始数组最大元素与最小元素所处的位置,依据此可找到最小元素。
二、实现代码
class Solution {
public:
int minNumberInRotateArray(vector<int> rotateArray) {
int len = rotateArray.size();
if(len==0)
return 0;
int min = rotateArray[0];
//对数组从前往后进行遍历,找到后一个元素大于前一个元素对应的位置
//后一个元素即为所求的最小值
for(int i=0;i<len-1;i++){
if(rotateArray[i+1]<rotateArray[i])
min = rotateArray[i+1];
}
return min;
}
};