力扣-69- x 的平方根

自行实现某个数学函数…我记得《剑指Offer》也有这种题

第一想法是从0开始,看i*ix的大小比较,如果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;
	}
};

方法三可以比二分更快地迭代,但是我高数没学好😂下次一定

posted @ 2023-01-29 12:54  YaosGHC  阅读(31)  评论(0)    收藏  举报