LeetCode 69题Sqrt(x)的问题
来源:3-2 改变变量定义,依然可以写出正确的算法
软件工程小白菜
2019-04-04
波波老师您好,关于这道题,我能看出用的是二分搜索法,但是这道题和常规二分搜索法又有不同。
因为他要求的是返回切除小数部分后的整数,这给我增加了难度。这样的话,我就不知道我的mid应该在什么时候停止,如果是普通的二分搜索法,mid == x / mid的时候则停止返回mid,但是以8为例,正确答案为2,但是 2 != 8/2
希望老师能提示一下这道题,多谢!
写回答
1回答
-
最简单的方法,是使用二分搜索法,搜索出一个浮点数,也就是sqrt(x)的解,然后取整数部分就好了。
我的这个思路的解法,可以参考:
https://github.com/liuyubobobo/Play-Leetcode/blob/master/0069-Sqrt-x/cpp-0069/main2.cpp
如果完全在整数范围解决这个问题,也是可以的。相当于,用二分搜索法,找到一个a,使得a*a是小于x的最大值。这是一个经典的,用二分查找法的思路,求解ceil的问题:搜索到小于(或者等于)x的最大值。和ceil问题相对应的,还有floor问题。搜索到大于(或等于)x的最小值。
在我的《数据结构于算法》课程的补充代码中,给出了二分搜索法求解这两个问题的代码:
对于这个问题,这个思路的解法,可以参考我的代码:
https://github.com/liuyubobobo/Play-Leetcode/blob/master/0069-Sqrt-x/cpp-0069/main.cpp
继续加油!:)
112019-04-05
相似问题