# Maximum set bit sum in array without considering adjacent elements

Given an array of integers arr[]. The task is to find the maximum sum of set bits(of the array elements) without adding the set bits of adjacent elements of the array.

Examples:

```Input : arr[] = {1, 2, 4, 5, 6, 7, 20, 25}
Output : 9

Input : arr[] = {5, 7, 9, 5, 13, 7, 20, 25}
Output : 11
``` ## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach:

1. First of all, find the total number of set bits for every element of the array and store them in a different array or the same array(to avoid using extra space).
2. Now, the problem is reduced to find the maximum sum in the array such that no two elements are adjacent.
3. Loop for all elements in arr[] and maintain two sums incl and excl where incl = Max sum including the previous element and excl = Max sum excluding the previous element.
4. Max sum excluding the current element will be max(incl, excl) and max sum including the current element will be excl + current element (Note that only excl is considered because elements cannot be adjacent).
5. At the end of the loop return max of incl and excl.

Below is the implementation of the above approach:

## C++

 `// C++ program to maximum set bit sum in array ` `// without considering adjacent elements ` `#include ` `using` `namespace` `std; ` ` `  `// Function to count total number  ` `// of set bits in an integer ` `int` `bit(``int` `n) ` `{ ` `    ``int` `count = 0; ` `     `  `    ``while``(n) ` `    ``{ ` `        ``count++; ` `        ``n = n & (n - 1); ` `    ``} ` `     `  `    ``return` `count; ` `} ` ` `  `// Maximum sum of set bits ` `int` `maxSumOfBits(``int` `arr[], ``int` `n) ` `{  ` `    ``// Calculate total number of  ` `    ``// set bits for every element  ` `    ``// of the array ` `    ``for``(``int` `i = 0; i < n; i++) ` `    ``{ ` `        ``// find total set bits for ` `        ``// each number and store  ` `        ``// back into the array ` `        ``arr[i] = bit(arr[i]); ` `    ``} ` `     `  `    ``int` `incl = arr;  ` `    ``int` `excl = 0;  ` `    ``int` `excl_new;  ` `     `  `    ``for` `(``int` `i = 1; i < n; i++)  ` `    ``{  ` `        ``// current max excluding i  ` `        ``excl_new = (incl > excl) ?  ` `                            ``incl : excl;  ` ` `  `        ``// current max including i  ` `        ``incl = excl + arr[i];  ` `        ``excl = excl_new;  ` `    ``}  ` ` `  `    ``// return max of incl and excl  ` `    ``return` `((incl > excl) ? ` `                     ``incl : excl);  ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `arr[] = {1, 2, 4, 5,  ` `                 ``6, 7, 20, 25}; ` `     `  `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr); ` `     `  `    ``cout << maxSumOfBits(arr, n); ` `     `  `    ``return` `0; ` `}  `

## Java

 `// Java program to maximum set bit sum in array ` `// without considering adjacent elements ` `import` `java.util.*; ` `import` `java.lang.*; ` `import` `java.io.*; ` ` `  `class` `GFG ` `{ ` `// Function to count total number   ` `// of set bits in an integer ` `static` `int` `bit(``int` `n) ` `{ ` `    ``int` `count = ``0``; ` `     `  `    ``while``(n > ``0``) ` `    ``{ ` `        ``count++; ` `        ``n = n & (n - ``1``); ` `    ``} ` `     `  `    ``return` `count; ` `} ` ` `  `// Maximum sum of set bits ` `static` `int` `maxSumOfBits(``int` `arr[], ``int` `n) ` `{  ` `// Calculate total number of set bits ` `// for every element of the array ` `for``(``int` `i = ``0``; i < n; i++) ` `{ ` `    ``// find total set bits for  ` `    ``// each number and store  ` `    ``// back into the array ` `    ``arr[i] = bit(arr[i]); ` `} ` ` `  `int` `incl = arr[``0``];  ` `int` `excl = ``0``;  ` `int` `excl_new;  ` ` `  `for` `(``int` `i = ``1``; i < n; i++)  ` `{  ` `    ``// current max excluding i  ` `    ``excl_new = (incl > excl) ?   ` `                        ``incl : excl;  ` ` `  `    ``// current max including i  ` `    ``incl = excl + arr[i];  ` `    ``excl = excl_new;  ` `}  ` ` `  `// return max of incl and excl  ` `return` `((incl > excl) ?  ` `                 ``incl : excl);  ` `} ` ` `  `// Driver code ` `public` `static` `void` `main(String args[]) ` `{ ` `    ``int` `arr[] = {``1``, ``2``, ``4``, ``5``,  ` `                 ``6``, ``7``, ``20``, ``25``}; ` `     `  `    ``int` `n = arr.length; ` `     `  `    ``System.out.print(maxSumOfBits(arr, n)); ` `}  ` `} ` ` `  `// This code is contributed ` `// by Subhadeep `

## Python3

 `# Python3 program to maximum set bit sum in  ` `# array without considering adjacent elements ` ` `  `# Function to count total number  ` `# of set bits in an integer ` `def` `bit(n): ` ` `  `    ``count ``=` `0` `     `  `    ``while``(n): ` `     `  `        ``count ``+``=` `1` `        ``n ``=` `n & (n ``-` `1``) ` `     `  `    ``return` `count ` ` `  `# Maximum sum of set bits ` `def` `maxSumOfBits(arr, n): ` ` `  `    ``# Calculate total number of set bits ` `    ``# for every element of the array ` `    ``for` `i ``in` `range``( n): ` `     `  `        ``# find total set bits for each  ` `        ``# number and store back into the array ` `        ``arr[i] ``=` `bit(arr[i]) ` `     `  `    ``incl ``=` `arr[``0``] ` `    ``excl ``=` `0` `     `  `    ``for` `i ``in` `range``(``1``, n) : ` `     `  `        ``# current max excluding i  ` `        ``if` `incl > excl: ` `            ``excl_new ``=` `incl  ` `        ``else``: ` `            ``excl_new ``=` `excl ` ` `  `        ``# current max including i  ` `        ``incl ``=` `excl ``+` `arr[i];  ` `        ``excl ``=` `excl_new ` `     `  `    ``# return max of incl and excl  ` `    ``if` `incl > excl: ` `        ``return` `incl  ` `    ``else` `: ` `        ``return` `excl ` ` `  `# Driver code ` `if` `__name__ ``=``=` `"__main__"``: ` ` `  `    ``arr ``=` `[``1``, ``2``, ``4``, ``5``,  ` `           ``6``, ``7``, ``20``, ``25``] ` `     `  `    ``n ``=` `len``(arr) ` `     `  `    ``print` `(maxSumOfBits(arr, n)) ` `     `  `# This code is contributed by ita_c `

## C#

 `// C# program to maximum set bit sum in array ` `// without considering adjacent elements ` `using` `System; ` ` `  `class` `GFG ` `{ ` `// Function to count total number  ` `// of set bits in an integer ` `static` `int` `bit(``int` `n) ` `{ ` `    ``int` `count = 0; ` `     `  `    ``while``(n > 0) ` `    ``{ ` `        ``count++; ` `        ``n = n & (n - 1); ` `    ``} ` `     `  `    ``return` `count; ` `} ` ` `  `// Maximum sum of set bits ` `static` `int` `maxSumOfBits(``int` `[]arr, ``int` `n) ` `{  ` `     `  `// Calculate total number of set bits ` `// for every element of the array ` `for``(``int` `i = 0; i < n; i++) ` `{ ` `     `  `    ``// find total set bits for  ` `    ``// each number and store  ` `    ``// back into the array ` `    ``arr[i] = bit(arr[i]); ` `} ` ` `  `int` `incl = arr;  ` `int` `excl = 0;  ` `int` `excl_new;  ` ` `  `for` `(``int` `i = 1; i < n; i++)  ` `{  ` `    ``// current max excluding i  ` `    ``excl_new = (incl > excl) ?  ` `                        ``incl : excl;  ` ` `  `    ``// current max including i  ` `    ``incl = excl + arr[i];  ` `    ``excl = excl_new;  ` `}  ` ` `  `// return max of incl and excl  ` `return` `((incl > excl) ?  ` `                 ``incl : excl);  ` `} ` ` `  `// Driver code ` `public` `static` `void` `Main() ` `{ ` `    ``int` `[]arr = {1, 2, 4, 5,  ` `                 ``6, 7, 20, 25}; ` `     `  `    ``int` `n = arr.Length; ` `     `  `    ``Console.WriteLine(maxSumOfBits(arr, n)); ` `}  ` `} ` ` `  `// This code is contributed ` `// by chandan_jnu. `

## PHP

 ` ``\$excl``) ?  ` `                            ``\$incl` `: ``\$excl``;  ` ` `  `        ``// current max including i  ` `        ``\$incl` `= ``\$excl` `+ ``\$arr``[``\$i``];  ` `        ``\$excl` `= ``\$excl_new``;  ` `    ``}  ` ` `  `    ``// return max of incl and excl  ` `    ``return` `((``\$incl` `> ``\$excl``) ?  ` `                    ``\$incl` `: ``\$excl``);  ` `}  ` ` `  `// Driver code  ` ` `  `    ``\$arr` `= ``array``(1, 2, 4, 5,  ` `                ``6, 7, 20, 25);  ` `     `  `     ``\$n` `= sizeof(``\$arr``) / sizeof(``\$arr``);  ` `     `  `    ``echo`  `maxSumOfBits(``\$arr``, ``\$n``);  ` `     `  ` `  `#This Code is Contributed by ajit     ` `?> `

Output:

`9`

Time Complexity: O(Nlogn)
Auxiliary Space: O(1)

Note: Above code can be optimised to O(N) using __builtin_popcount function to count set bits in O(1) time.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.