力扣-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; } };
方法三可以比二分更快地迭代,但是我高数没学好😂下次一定
本文作者:YaosGHC
本文链接:https://www.cnblogs.com/yaocy/p/17072037.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步