JZ06-旋转数组的最小数字
旋转数组的最小数字
https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba?tpId=13&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey
//二分
public int minNumberInRotateArray2(int [] array) {
if(array == null||array.length==0){
return 0;
}
if(array.length == 1){
return array[0];
}
int left = 0;
int right = array.length - 1;
while (left < right) {
int mid = left + ((right - left) >> 1); //+号优先级高
if (array[mid] > array[right]) {
left = mid + 1;
} else {
right = mid;
}
}
return array[left];
}
//有重复元素
public int minNumberInRotateArray3(int[] array) {
if (array == null || array.length == 0) {
return -1;
}
int left = 0;
int right = array.length - 1;
while (left < right) {
int mid = (left + right) / 2;
if (array[mid] > array[right]) {
left = mid + 1;
} else if (array[mid] < array[right]) {
right = mid; //如果是mid-1,则可能会错过最小值,因为找的就是最小值
} else {
right--; //巧妙避免了offer书上说的坑点(1 0 1 1 1)
}
}
return array[left];
}
查看16道真题和解析