mirror of
https://github.com/TheAlgorithms/Java.git
synced 2025-07-20 10:14:50 +08:00
Formatted with Google Java Formatter
This commit is contained in:
@ -4,46 +4,37 @@ import java.util.Scanner;
|
||||
|
||||
/**
|
||||
* @author Nishita Aggarwal
|
||||
* <p>
|
||||
* Brian Kernighan’s 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)
|
||||
* <p>Brian Kernighan’s 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)
|
||||
*/
|
||||
|
||||
|
||||
public class BrianKernighanAlgorithm {
|
||||
|
||||
/**
|
||||
* @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++;
|
||||
}
|
||||
return cnt;
|
||||
/**
|
||||
* @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++;
|
||||
}
|
||||
return cnt;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @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();
|
||||
}
|
||||
/** @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();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user