LeetCode 069 x的平方根
2019-12-10 本文已影响0人
洛珎
题目:
![](https://img.haomeiwen.com/i9044981/feab236eb5b399bd.png)
思路:1.暴力解法:因为忽略了非负数,直接 i*i <= x <=(i+1)*(i+1)
![](https://img.haomeiwen.com/i9044981/0da56e317d48533f.png)
2.二分法:
首先判断是不是 0 或者 1 这两种特殊情况,如果是,则返回这两个数字。
开始二分,设置左侧为 1,右侧范围为 x,形成闭区间 [1, x](数学表示,而不是数组)。
输入 8,形成闭区间 [1, 8]。
第一次遍历,Math.floor((1 + 8) / 2) 的值为 4,因为 4 * 4 = 16,该值大于 8,所以这时候闭区间变成:[1, 4]。
第二次遍历,Math.floor((1 + 4) / 2) 的值为 2,因为 2 * 2 = 4,该值小于 8,所以这时候闭区间变成:[2, 4]。
第三次遍历,Math.floor((1 + 4) / 2) 的值为 3,因为 3 * 3 = 9,该值大于 8,所以这时候闭区间变成:[2, 3]。
此时,因为 2 === 3 - 1 && 2² <= 8 && 3² > 8,所以我们找到了最终值,即 2
![](https://img.haomeiwen.com/i9044981/1a11844af55f2072.png)
![](https://img.haomeiwen.com/i9044981/f4da28faa69b8650.png)