JavaAlgorithms/Others/BrianKernighanAlgorithm.java

41 lines
1.1 KiB
Java
Raw Permalink Normal View History

package Others;
2017-12-30 04:41:15 +08:00
import java.util.Scanner;
/**
* @author Nishita Aggarwal
2020-10-24 18:23:28 +08:00
* <p>Brian Kernighans Algorithm
* <p>algorithm to count the number of set bits in a given number
* <p>Subtraction of 1 from a number toggles all the bits (from right to left) till the
* rightmost set bit(including the rightmost set bit). So if we subtract a number by 1 and do
* bitwise & with itself i.e. (n & (n-1)), we unset the rightmost set bit.
* <p>If we do n & (n-1) in a loop and count the no of times loop executes we get the set bit
* count.
* <p>
* <p>Time Complexity: O(logn)
2017-12-30 04:41:15 +08:00
*/
public class BrianKernighanAlgorithm {
2020-10-24 18:23:28 +08:00
/**
* @param num: number in which we count the set bits
* @return int: Number of set bits
*/
static int countSetBits(int num) {
int cnt = 0;
while (num != 0) {
num = num & (num - 1);
cnt++;
}
2020-10-24 18:23:28 +08:00
return cnt;
}
2020-10-24 18:23:28 +08:00
/** @param args : command line arguments */
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int setBitCount = countSetBits(num);
System.out.println(setBitCount);
sc.close();
}
2017-12-30 04:41:15 +08:00
}