题目:
给定一个非负整数 x ,计算并返回 x 的平方根,即实现 int sqrt(int x) 函数。
正数的平方根有两个,只输出其中的正数平方根。
如果平方根不是整数,输出只保留整数的部分,小数部分将被舍去。
输入: x = 8
输出: 2
解释: 8 的平方根是 2.82842…,由于小数部分将被舍去,所以返回 2
输入: x = 4
输出: 2
分析:
假如输入的非负整数是n,从0开始每次增加1,对于每个整数m,判断m^2是否小于或等于n,如果找到一个m,并且满足m ^2 <=n 和(m+1) ^2>n,那么m就是n的平方根,这种操作的时间复杂度为O(n ^1/2)。
根据数学常识对于每个整数m,判断m^2是否小于或等于n,如果找到一个m,并且满足m ^2 <=n 和(m+1) ^2>n,就得到这个平方根,例如8的平方根是2,2的平方小于8并且2+1的平方大于8.可以采用二分查找法,时间复杂度为O(logn),具体见代码
代码: