mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-04 07:29:47 +08:00

* algorithm: add SquareRootLogarithmic algo and a test for it * fix: fix spelling errors * refactor: rename a variable "e" --> "edge"
42 lines
975 B
JavaScript
42 lines
975 B
JavaScript
/**
|
|
* @function squareRootLogarithmic
|
|
* @description
|
|
* Return the square root of 'num' rounded down
|
|
* to the nearest integer.
|
|
* More info: https://leetcode.com/problems/sqrtx/
|
|
* @param {Number} num Number whose square of root is to be found
|
|
* @returns {Number} Square root
|
|
* @see [BinarySearch](https://en.wikipedia.org/wiki/Binary_search_algorithm)
|
|
* @example
|
|
* const num1 = 4
|
|
* logarithmicSquareRoot(num1) // ====> 2
|
|
* @example
|
|
* const num2 = 8
|
|
* logarithmicSquareRoot(num1) // ====> 2
|
|
*
|
|
*/
|
|
const squareRootLogarithmic = (num) => {
|
|
if (typeof num !== 'number') {
|
|
throw new Error('Input data must be numbers')
|
|
}
|
|
let answer = 0
|
|
let sqrt = 0
|
|
let edge = num
|
|
|
|
while (sqrt <= edge) {
|
|
const mid = Math.trunc((sqrt + edge) / 2)
|
|
if (mid * mid === num) {
|
|
return mid
|
|
} else if (mid * mid < num) {
|
|
sqrt = mid + 1
|
|
answer = mid
|
|
} else {
|
|
edge = mid - 1
|
|
}
|
|
}
|
|
|
|
return answer
|
|
}
|
|
|
|
export { squareRootLogarithmic }
|