等差数列的公式
1+3+5+7+9+.....+2k-1 = k^2
所以我们求到第一个比k^2大的数,然后让他减一就好了。
int sqrt(int x) {
// write code here
long long target=x;
long long sum=0;
long long start_num=1;
while(sum < target){
sum+=start_num;
start_num+=2;
}
long long res=(start_num-1)/2;
if(res*res==target){
return res;
}else{
return res-1;
}
}
非常优雅,复杂度只是O(k),也不用二分法。