public static int sqrt(int x) {
if( x == 0 || x == 1){
return x;
}
long start = 0;
long end = x;
while ( end-start > 1){
long mid = (int)(end + start) / 2;
long s = mid * mid;
if(s == x){
return (int)mid;
}
else if(s > x){
end = mid;
}
else {
start = mid;
}
}
return (int)start;
}
以上是工作代码段。我有以下问题。提前谢谢你的帮助。 ; - )
答案 0 :(得分:0)
返回类型int
仅表示您返回类型为int
的结果。它与方法体内的算法无关。下面我试着回答你的问题:
While(end-start > 1)
用于确保end
始终大于start
。如果end-start
为1或小于1,则表示您已到达二进制搜索结束。while(end-start > 1)
更改为while(end > start)
,它仍然可以使用。不必制作end = mid-1
并开始= mid+1
。您应该尝试以下链接以更好地理解二进制搜索算法。
http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=binarySearch
希望它有所帮助。