LeetCode 69题Sqrt(x)的问题

来源:3-2 改变变量定义,依然可以写出正确的算法

软件工程小白菜

2019-04-04

波波老师您好,关于这道题,我能看出用的是二分搜索法,但是这道题和常规二分搜索法又有不同。

因为他要求的是返回切除小数部分后的整数,这给我增加了难度。这样的话,我就不知道我的mid应该在什么时候停止,如果是普通的二分搜索法,mid == x / mid的时候则停止返回mid,但是以8为例,正确答案为2,但是 2 != 8/2

希望老师能提示一下这道题,多谢!

写回答

1回答

liuyubobobo

2019-04-04

最简单的方法,是使用二分搜索法,搜索出一个浮点数,也就是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-with-Algorithms/blob/master/05-Binary-Search-Tree/Course%20Code%20(C%2B%2B)/Optional-02-Floor-and-Ceil-in-Binary-Search/main.cpp


对于这个问题,这个思路的解法,可以参考我的代码:

https://github.com/liuyubobobo/Play-Leetcode/blob/master/0069-Sqrt-x/cpp-0069/main.cpp


继续加油!:)

1
1
软件工程小白菜
多谢老师指点!
2019-04-05
共1条回复

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7408 学习 · 1150 问题

查看课程