思路:二分查找,如果是例子中,非严格递增的,遇到后使用顺序查找
/**
* {3,4,5,1,2}
* {5,1,2,3,4}
* <p>
* {0,1,1,1,1}
* {1, 0,1,1,1}
* {1,1,1, 0,1}
*/
static int getMinNum(int[] data) {
int left = 0;
int right = data.length - 1;
while (right - left > 1) {
int mid = left + (right - left) / 2;
if (data[left] == data[right] && data[left] == data[mid])
return getMinNum1(data, left, right);
if (data[mid] > data[left]) {
left = mid;
} else {
right = mid;
}
}
return data[right];
}
static int getMinNum1(int[] data, int left, int right) {
int min = data[left];
for (int i = left + 1; i <= right; i++) {
if (data[i] < min)
min = data[i];
}
return min;
}