旋转数组的最小数字
关键词:二分查找
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。  
示例 1:
示例2:
思路
思路一:
利用二分查找的方式寻找转折点。
注意重复数字的情况。如[2 2 2 2 2 2]、[5 5 1 2 2 2 3 3]、[10 10 1 10 10 10]以及没有翻转的情况。
代码
思路一:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 
 | class Solution {public:
 int minArray(vector<int>& numbers) {
 int len = numbers.size();
 if(len <= 0) return 0;
 if(len == 0) return numbers[0];
 int l = 0;
 int r = len - 1;
 while (l < r) {
 int mid = ((r - l) >> 1) + l;
 
 if (numbers[r] > numbers[mid]) {
 r = mid;
 } else if (numbers[r] < numbers[mid]) {
 l = mid + 1;
 
 } else r--;
 }
 return numbers[l];
 }
 };
 
 | 
知识点
- 二分查找
- 重复数字情况的考虑