很简单的一道题,基本思路就是二分查找。但是需要注意的是一个细节问题....二分计算mid不要用(left+right)/2,而要使用left+(right-left)/2;只是因为面对边界条件,即right和left较大时,虽然left和right能用int表示,但是left+right有可能大于MAX_INT导致overflow,而right-left则不会存在这种情况....这也是TLE的原因所在....
public class Solution extends VersionControl {
public int firstBadVersion(int n) {
int left=1,right=n;
int mid;
while(left<=right)
{
mid = left+(right-left)/2;
if( isBadVersion(mid)==true )
{
right = mid-1;
}
else
{
left = mid+1;
}
}
return left;
}
}
本文探讨了在二分查找算法中避免整数溢出的方法,通过使用改进的mid计算公式left + (right - left) / 2来确保算法在处理大范围数据时的稳定性和效率。
1769

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



