题目描述
假设按照升序排序的数组在预先未知的某个点上进行了旋转。请找出其中最小的元素。(你可以假设数组中不存在重复元素)
输入: [3,4,5,1,2]
输出: 1
解题思路
《剑指offer》第11题,不过在这里这个题难度降低了,已经规定了无重复元素。
参考代码
这是《剑指offer》上的解法,考虑了各种可能情况。
class Solution {
public:
int findMin(vector<int> rotateArray) {
int length = rotateArray.size();
if(length == 0)
return 0;
int low = 0, high = length-1;
int mid = low; // 特殊情况:排序数组
while(rotateArray[low] >= rotateArray[high]){ // 这个循环条件记不清了
if(high - low == 1){
mid = high;
break;
}
mid = (low + high)>>1;
if(rotateArray[low] == rotateArray[mid] && rotateArray[mid] == rotateArray[high]){
return minInArray(rotateArray, low, high);
}
if(rotateArray[mid] >= rotateArray[low])
low = mid;
else
high = mid;
}
return rotateArray[mid];
}
int minInArray(vector<int> rotateArray, int low, int high){
int _Min = 0x7FFFFFFF;
for(int i=0; i<rotateArray.size(); i++){
if(rotateArray[i] < _Min)
_Min = rotateArray[i];
}
return _Min;
}
};