# 剑指offer--旋转数组的最小数字

NOTE：给出的所有元素都大于0，若数组大小为0，请返回0。

public class Solution {

public int minNumberInRotateArray(int [] array) {
if ( array == null || array.length < 1){
return -1;
}
int len = array.length;
int low = 0;
int high = len - 1;
int mid = (low + high) / 2;

//如果首个元素小于最后一个元素，表明数组是排序的。
if (array[low] < array[high]){
return array[low];
}

//当low指针与high指针相邻的时候，high指针指向的就是最小元素
if ( high - low == 1){
return array[high];
}

while(low < high){
mid = ( low + high) / 2;
if(mid==low){//if there are only two elements left
return (array[low] < array[high])? array[low] : array[high];
}
if ( array[mid] >= array[low]){
low = mid;
}else if ( array[mid] <= array[high]){
high = mid;
}
}
return array[mid];
}
}


C++代码如下：

class Solution {
public:
int minNumberInRotateArray(vector<int> rotateArray) {
if(rotateArray.size() == 0){
return 0;
}
int low = 0;
int high = rotateArray.size()-1;
//若为升序数组
if(rotateArray[low] < rotateArray[high]){
return rotateArray[low];
}
//降序数组，两个元素
if(high - low == 1){
return rotateArray[high];
}
//降序数组，不止两个元素
int mid = (low+high)/2;
while(low < high){
mid = (low+high)/2;
if(mid == low){//2个元素
return  (rotateArray[low] < rotateArray[high])?rotateArray[low]:rotateArray[high];
}
if(rotateArray[mid] >= rotateArray[low]){
low = mid;
}else if(rotateArray[mid] <= rotateArray[high]){
high = mid;
}
}
return rotateArray[mid];
}
};

#### 剑指offer- 旋转数组的最小元素

2016-10-28 16:23:24

#### 【剑指offer】旋转数组的最小值

2014-05-08 20:30:35

#### 剑指Offer:面试题6重建二叉树

2016-08-17 14:18:42

#### 剑指Offer--旋转数组的最小数字

2018-03-19 16:34:17

#### 剑指offer之旋转数组中的最小值

2015-11-23 09:25:50

#### 剑指offer——字符串的排列

2016-03-21 21:11:39

#### 剑指offer第六题【旋转数组的最小数字】c++实现

2015-10-14 11:30:19

#### 剑指offer----旋转数组的最小数字----java实现

2016-07-14 15:34:09

#### 查找旋转数组的最小数字 JAVA实现

2017-05-22 09:20:34

#### 剑指Offer面试题8（java版）:旋转数组的最小数字

2015-07-28 17:26:03