诶,二分查找一直是一个痛啊,搞不清楚要不要加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]);
}
二分查找中边界条件详解及优化

本文深入探讨了二分查找算法中边界条件处理的重要性,并提供了优化建议,帮助解决常见错误,确保算法的正确性和效率。
330

被折叠的 条评论
为什么被折叠?



