# Numbers that are Bitwise AND of At Least One Non-Empty Sub-Array using C++

C++Server Side ProgrammingProgramming

#### C in Depth: The Complete C Programming Guide for Beginners

45 Lectures 4.5 hours

#### Practical C++: Learn C++ Basics Step by Step

Most Popular

50 Lectures 4.5 hours

#### Master C and Embedded C Programming- Learn as you go

66 Lectures 5.5 hours

To solve a problem where we are given an array, and we need to find all possible integers which are bitwise AND of at least one not empty subarray, for example −

Input : nums[ ] = { 3, 5, 1, 2, 8 }
Output : { 2, 5, 0, 3, 8, 1 }
Explanation:
2 is the bitwise AND of subarray {2},
5 is the bitwise AND of subarray {5},
0 is the bitwise AND of subarray {1, 2}, {2, 8} and {1, 2, 8},
3 is the bitwise AND of subarray {3},
8 is the bitwise AND of subarray {8},
1 is the bitwise AND of subarray {1}, {3, 5} and {3, 5, 1}.

Input : nums[ ] = { 2, 6, 3, 8, 1 }
Output: { 1, 8, 3, 6, 2, 0 }

## Approach to Find the Solution

A Simple Approach that can be applied is,

• Find all the possible non-empty subarrays.

• While traversing through the array, calculate the bitwise AND of each element in the subarray.

• To avoid duplicate values, store all the results in a set.

## Example

#include <bits/stdc++.h>
using namespace std;
int main(){
int arr[] ={ 2, 6, 3, 8, 1 };
int n = sizeof(arr) / sizeof(arr);
// Declaring set to store result of each AND operation.
unordered_set<int> result;
int val;
// nested loops to traverse through all the possible non empty subarrays.
for (int i = 0; i < n; ++i){
for (int j = i, val = INT_MAX; j < n; ++j){
val = val & arr[j];
// storing result of AND operation
result.insert(val);
}
}
cout << "All possible numbers are: ";
// printing all the values of set.
for (auto i = result.begin(); i != result.end();i++)
cout << *i << " ";
return 0;
}

## Output

All possible numbers are: 1 8 3 6 0 2

## Explanation of the Above Code

• Declaring set to store all the results of AND operation.

• Initializing the ‘val’ variable with INT_MAX because we need to do AND operation with all the bits set to 1.

• Inside loop to go through all possible subarrays from the ith index.

• Calculating AND operation of each element with each other and with themselves and storing in the result set.

• Printing all the values of the result set.

## Conclusion

In this tutorial, We discussed a simple approach to solve this problem, i.e., calculating AND operation in every possible subarray. We also discussed the C++ program to solve this problem. Also, you can write this code in any other language like Java, C, Python, etc. We hope you find this tutorial helpful.