关于leetcode个人解题总结:力扣之x的平方根双指针解法思路分析优化
题目形容给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 因为返回类型是整数,后果只保留 整数局部 ,小数局部将被 舍去 。 留神: 不容许应用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。 示例 1: 输出: x = 4输入: 2示例 2: 输出: x = 8输入: 2解释: 8 的算术平方根是 2.82842..., 因为返回类型是整数,小数局部将被舍去。提醒: 0 <= x <= 231 - 1力扣原题目地址:https://leetcode.cn/problems/...思路解法剖析求一个数的平方根的值,由数学常识知,那么这个值,肯定是小于等于这个数的,如:0的平方根为0,等于01的平方根为1,等于12的平方根约为1.414,小于23的平方根约为1.732,小于34的平方根为2,小于4......x的平方根为m,m小于等于x所以x的平方根的值,肯定是介于0和x之间的一个数所以,咱们能够应用双指针的形式,定义两个指针,右边指针为0,左边指针为x,而后通过中位数的积,去与x的值进行判断,等于阐明间接找到了;大于x那就把右侧指针往左挪动,即减小减一;小于x那就把左侧指针往右挪动,即增大加一; 如下代码: 实现形式一(耗时略长)var mySqrt = function (x) { let left = 0 // 左侧指针初始为0 let right = x // 右侧指针初始为x自身 while (left <= right) { // 只有left小于等于right就始终执行,直至大于才进行 // 保留整数局部,以9为例,中位数4.5保留4即可 let middle = Math.floor((left + right) / 2) if (middle * middle == x) { // 若等于则是刚好找到 return middle // 刚好找到则间接返回即可 } else if (middle * middle > x) { // 若大于超过了 right = right - 1 // 那就减小一些 } else if (middle * middle < x) { // 若小于为达到 left = left + 1 // 那就增大一些 } } return right // 返回指针值即为平方根(四舍五入)};提交截图(超出工夫限度)写完当前,咱们间接提交LeetCode,发现:超时了!!! ...