解题思路:
- 如果中间值比最右面的值小,那么最小值一定在旋转数组中间的左面(也可能就是中间值)
- 如果中间值比最右面的值大,那么最小值一定在旋转数组中间的右面
- 如果中间值和最右面的一样大,最右面的值减一,继续循环找
时间复杂度O(logN,空间复杂度O(1)
import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int [] array) {
int left = 0, right = array.length - 1, mid = (right + left) / 2;
while (left < right) {
if (array[mid] < array[right]) {
//如果中间值比最右面的值小,那么最小值一定在旋转数组中间的左面(也可能就是中间值)
right = mid ;
} else if (array[mid] > array[right]) {
//如果中间值比最右面的值大,那么最小值一定在旋转数组中间的右面
left = mid + 1;
} else {
//如果中间值和最右面的一样大,最右面的值减一,继续循环找
right--;
}
mid = (right + left) / 2;
}
return array[mid];
}
}