1 要求
一个数小于左右两边的数,则该数为局部最小;
头尾两数要求比相邻数小即可;
2 代码
public static int partMin(int [] arr){
int N=arr.length;
if(arr==null||N==0)return -1;
if(N==1)return 0;
if(arr[0]<arr[1])return 0;
if(arr[N-1]<arr[N-2])return N-1;
int L=0;
int R=N-1;
int ans=-1;
while(L<=R){
int mid=(L+R)/2;
if(arr[mid]<arr[mid-1]&&arr[mid]<arr[mid+1]){ ans=mid;break;}
else if(arr[mid-1]<arr[mid]){R=mid-1;continue;}
else if(arr[mid+1]<arr[mid]){L=mid+1;continue;}
}
return ans;
}
public static void main(String[] args) {
int[]arr={13,2,1,0,5,7,8};
System.out.println(partMin(arr));
}