1、题目
2、解法
import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int [] array) {
if (array.length == 0) return -1;
if (array.length == 1) return array[0];
int start = 0, end = array.length-1;
int mid = 0;
while(start < end) {
// 针对的时10111, 这样特殊的情况
if (array[start] < array[end]) {
return array[start];
}
mid = (start + end) / 2;
if (array[start] < array[mid]) {
start = mid + 1;
} else if (array[mid] < array[end]){
// 避免错过最小值
end = mid;
} else {
// 这里end不能动,后部分有可能出最小值
start++;
}
}
// 当start和end相等时,返回
return array[start];
}
}
时间复杂度O(logn),空间复杂度O(1)
和这道题相似的一道题:添加链接描述