Add implementation for square root using Binary Search (#2509)
Co-authored-by: sahil.samantaray <sahil.samantaray@nymble.in>
This commit is contained in:
parent
5b8bcf0c63
commit
f336c40951
59
Searches/SquareRootBinarySearch.java
Normal file
59
Searches/SquareRootBinarySearch.java
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
package Searches;
|
||||||
|
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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 class SquareRootBinarySearch {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the driver method.
|
||||||
|
*
|
||||||
|
* @param args Command line arguments
|
||||||
|
*/
|
||||||
|
public static void main(String args[]) {
|
||||||
|
Scanner sc = new Scanner(System.in);
|
||||||
|
System.out.print("Enter a number you want to calculate square root of : ");
|
||||||
|
int num = sc.nextInt();
|
||||||
|
long ans = squareRoot(num);
|
||||||
|
System.out.println("The square root is : " + ans);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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
|
||||||
|
*/
|
||||||
|
private 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;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user