诶,二分查找一直是一个痛啊,搞不清楚要不要加1和等号的问题,真的挺郁闷的,本科学习的东西真的完全废掉了……真的得赶紧捡起来才行额
这道题目,当找到num[l]<=num[h]时候应该break,因为两种序列(先增 减到最小 然后增/一直增长)的规律(l和h的取值变化)是不一样的,要不然就出错了~
public int findMin(int[] num) {
int l=0;
int h=num.length-1;
if(num[l]<num[h])return num[l];
while(l<h){
int mid = (l+h) >>1;
if(num[l]<=num[h])break;
if(num[mid]>num[l])l=mid+1;
else if(num[mid]<num[l])h=mid;
else {
return Math.min(num[l], num[h]);
}
}
return Math.min(num[l], num[h]);
}