力扣-69- x 的平方根
自行实现某个数学函数…我记得《剑指Offer》也有这种题
第一想法是从0开始,看i*i
和x
的大小比较,如果i*i<x && (i+1)*(i+1)>x
那就是答案
但是这样很明显时间复杂度太高了,如果x很大,一个一个i*i地算肯定会超时
于是就有了经典的 二分查找
好吧一下子我还不知道怎么写😂
官解一我感觉还真不太行,做个变形,而且不是不让用函数吗,而且这也不是面试官想要考察的点吧,看了直摇头
class Solution {
public:
int mySqrt(int x) {
// 从0-x进行二分查找
int left = 0, right = x, ans = -1;
int mid = x / 2;
while (left <= right) {
int mid = (left + right) / 2;
// 这里可能溢出
if ((long long)mid * mid <= x) {
// 注意这里结果是写在小于等于中的,并且每次都会被刷新
ans = mid;
left = mid + 1;
}
else right = mid - 1;
}
return ans;
}
};
方法三可以比二分更快地迭代,但是我高数没学好😂下次一定