forked from TheAlgorithms/Java
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBrianKernighanAlgorithm.java
55 lines (49 loc) · 1.12 KB
/
BrianKernighanAlgorithm.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
48
49
50
51
52
53
54
55
import java.util.Scanner;
/**
*
* @author Nishita Aggarwal
*
* Brian Kernighan’s Algorithm
*
* algorithm to count the number of set bits in a given number
*
* 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.
*
* If we do n & (n-1) in a loop and count the no of times loop executes we get the set bit count.
*
*
* 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 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();
}
}