前端算法-x 的平方根

简介: 前端算法-x 的平方根

题目


给你一个非负整数 x ,计算并返回 x 的 算术平方根 ,由于返回类型是整数,结果只保留整数部分 ,小数部分将被 舍去 ,不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

输入: x = 8
输出: 2
解释: 8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。


题解


这里我们采用二分查找的方式进行实现,我们进入函数后先使用if语句判断当前出参x是不是等于0,如果等于0则直接将出参x返回出去,在声明两个变量,分别是left变量和right变量,left变量的值我们默认为1,right变量值默认为出参x减去1,在使用while进行循环,循环条件为当前left变量加1小于right变量,在循环中我们声明一个mid变量,他的值为left变量加上当前right变量减去left变量除以2最后使用Math.floor方法向下取整后的数,然后在使用if语句进行判断当前mid变量乘以mid变量后的值是否等于出参x,如果等于则直接将mid变量返回出去,不满足则往下判断当前mid变量乘以mid变量后的值是否小于出参x,如果小于则将mid变量的值赋值到left变量,最后则判断当前mid变量乘以mid变量后的值是否大于出参x,如果大于则将mid变量的值赋值到right变量,最后使用Math.floor方法将left变量值向下取整后返回出去

/**
 * @param {number} x
 * @return {number}
 */
var mySqrt = function(x) {
  if(x == 0) {
      return x
  }
  let left = 1, right = x - 1
  while(left + 1 < right) {
    let mid = left + Math.floor((right - left) / 2)
    if(mid * mid === x){
         return mid
    }
    if(mid * mid < x) {
        left = mid
     }
    if(mid * mid > x) {
        right = mid
    }
  }
  return Math.floor(left)
};

我们也可以直接使用Math数学函数进行实现,我们先用Math.sqrt方法获取到出参x的平方根,在使用Math.floor函数对Math.sqrt方法返回数进行向下取整,主要是防止通过Math.sqrt方法获取的是一个带小数点的数

/**
 * @param {number} x
 * @return {number}
 */
var mySqrt = function(x) {
return Math.floor(Math.sqrt(x));
};
相关文章
|
2月前
|
算法 前端开发 数据可视化
数据结构与算法在前端开发中的实际应用
本文将探讨数据结构与算法在前端开发中的实际应用,重点介绍在处理大规模数据、优化性能和提升用户体验方面的具体场景和解决方案。
|
15天前
|
算法 前端开发
前端算法 岛屿的最大面积 DFS(深度优先搜索)
前端算法 岛屿的最大面积 DFS(深度优先搜索)
11 0
|
4月前
|
算法 前端开发
前端算法-路径总和
前端算法-路径总和
|
4月前
|
算法 前端开发
前端算法-平衡二叉树
前端算法-平衡二叉树
|
4月前
|
算法 前端开发
前端算法-将有序数组转换为二叉搜索树
前端算法-将有序数组转换为二叉搜索树
|
4月前
|
算法 前端开发
前端算法-对称二叉树
前端算法-对称二叉树
|
4月前
|
存储 算法 前端开发
前端算法- 二叉树的中序遍历
前端算法- 二叉树的中序遍历
|
4月前
|
存储 算法 前端开发
前端算法-合并两个有序数组
前端算法-合并两个有序数组
|
4月前
|
存储 算法 前端开发
|
11天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。