题目
输入一个递增排序数列的一个旋转,输出旋转数组的最小值
算法:
- 局部有序
- 二分查找
- 特殊情况
{1,1,1,0,0,1,1}
无法区分哪个部分已经排序,只能把首部指针向前移动一位。
复杂度
o(lgN)
import java.util.*;
class Solution{
public int getMinOfRotation(int[] A){
int left=0,right=A.length-1,mid,min=A[left];
while(left<right){
mid=left+(right-left)/2;
min=Math.min(A[left], min);
if(A[mid]==A[left] && A[mid]==A[right]){
// 不能确定最小值在哪个部分,向前移动一位
left++;
}else if(A[mid]>=A[left]){
// 右半部分查找
left=mid+1;
min=Math.min(A[left], min);
}else{
// 左半部分查找
min = Math.min(A[mid], min);
right=mid-1;
}
}
return min;
}
}