You are given an array/list ‘ARR’ of ‘N’ positive integers’. Your task is to find out the size of the smallest subset with the maximum OR possible. That means that among all subsets that have OR of its elements maximum, you need to report the size of the smallest such subset.
For Example :Input : arr[] = {5, 1, 3, 4, 2}
Output : 2
7 is the maximum value possible of OR,
5|2 = 7 and 5|3 = 7
The first line contains a single integer ‘T’ representing the number of test cases.Then ‘T’ test cases follow.
The first line of each test case contains the integer ‘N’ representing the size of the input ‘ARR’.
The next line of each test case contains ‘N’ single space-separated integers that represent the elements of the ‘ARR’.
Output Format :
For each test case, return an integer denoting the size of the smallest subset with maximum possible OR.
Output for each test case will be printed in a separate line.
Note:
You don’t need to print anything, it has already been taken care of. Just implement the given function.
1 <= T <= 5
1 <= N <= 10^4
0 <= ARR[i] <= 10^3
Time Limit: 1 sec
1
6
2 6 2 8 4 5
3
15 is the maximum value of OR and set elements are 8, 6, and 5.
1
5
5 1 3 4 2
2
Can you find every possible subset of ‘ARR’ and check if its OR is equal to maxmum?
The maximum possible OR of any subset is the OR of the whole array. So let the OR of the whole array be equal to ‘K’.
The idea is to generate all possible subsets and check if any of them OR up to ‘K’. This can be done through recursion.
Here is the algorithm:
subsetOR(N , ARR):
helper(ARR, N, K, curr):
Return min(‘X’, ‘Y’).
O(2^N), where ‘N’ is the size of ‘ARR’.
Since from each recursive call, we make 2 new recursive calls. Hence the time complexity is O(2^N).
O(N), where ‘N’ is the size of ‘ARR’.
O(N) space is used in recursion for stack space at a time. Hence the space complexity is O(N).