-
Notifications
You must be signed in to change notification settings - Fork 19.4k
/
SquareRootBinarySearch.java
47 lines (45 loc) · 1.29 KB
/
SquareRootBinarySearch.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package com.thealgorithms.searches;
/**
* Given an integer x, find the square root of x. If x is not a perfect square,
* then return floor(√x).
* <p>
* For example, if x = 5, The answer should be 2 which is the floor value of √5.
* <p>
* The approach that will be used for solving the above problem is not going to
* be a straight forward Math.sqrt(). Instead we will be using Binary Search to
* find the square root of a number in the most optimised way.
*
* @author sahil
*/
public final class SquareRootBinarySearch {
private SquareRootBinarySearch() {
}
/**
* This function calculates the floor of square root of a number. We use
* Binary Search algorithm to calculate the square root in a more optimised
* way.
*
* @param num Number
* @return answer
*/
static long squareRoot(long num) {
if (num == 0 || num == 1) {
return num;
}
long l = 1;
long r = num;
long ans = 0;
while (l <= r) {
long mid = l + (r - l) / 2;
if (mid == num / mid) {
return mid;
} else if (mid < num / mid) {
ans = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
return ans;
}
}