题解 | #旋转数组的最小数字#
旋转数组的最小数字
http://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba
- 旋转数组由一个递增数组生成,所以一边的数组的元素会大于另一边数组的任意元素。所以当mid<right时mid和right在同一数组中,或者mid是元素小的一方时,搜索左边(包含mid),反之,mid>right 时,mid和right在不同数组,且right所在的数组必然是最小数组,故搜索右边 。 如果两者相等就去掉right 继续搜索。
```class Solution {
public:
int minNumberInRotateArray(vector<int> rotateArray) {
int left = 0, right = rotateArray.size() - 1;
while(left < right)
{
int mid = (left + right) >> 1; //取中间值
if(rotateArray[mid] > rotateArray[right]) left = mid + 1; //搜索右边
else if(rotateArray[mid] < rotateArray[right]) right = mid; //搜索左边
else right--; //继续搜索左边
}
return rotateArray[left];
}
};