Найдите размер наибольшего подмножества с положительным побитовым И

Опубликовано: 21 Сентября, 2022

Дан массив arr[] , состоящий из N положительных целых чисел, задача состоит в том, чтобы найти наибольший размер подмножества массива arr[] с положительным побитовым И.

Примечание. Если существует более одного такого подмножества, возвращайте размер только одного подмножества.

Примеры:

Input: arr[] = [7, 13, 8, 2, 3]
Output: 3
Explanation:
The subsets having Bitwise AND positive are {7,13,3} and {7,2,3}  are of length 3, which is of maximum length among all possible subsets.

Input: arr[] = [1, 2, 4, 8]
Output: 1

Подход: данная проблема может быть решена путем подсчета количества установленных битов в каждой соответствующей битовой позиции для всех элементов массива, а затем подсчет максимального количества установленных битов в любой позиции является максимальным количеством требуемого подмножества, потому что побитовое И всех эти элементы всегда положительны.

Иллюстрация:

7 -->  00111
13 --> 01101
 8 --> 01000
 2 --> 00010
 3 --> 00011
       ------
       02233 <-- Evident BitWise AND bit(Most number of 1"s in bit grid)

From above it is clearly evident that we can have maximum of 3 bitwise combinations 
where combinations are listed below as follows:         
{7,13,3}
{7,2,3}
  • Инициализируйте массив, скажем, bit[] размером 32 , в котором хранится количество установленных битов в каждой позиции i-го бита.
  • Пройдите по заданному массиву и для каждого элемента, скажем, arr[i] увеличьте частоту i-го бита в массиве bit[] , если i-й бит установлен в arr[i] .
  • После вышеуказанных шагов выведите максимум массива bit[] , чтобы вывести максимальный размер подмножества.

Ниже приведена реализация вышеуказанного подхода:

Временная сложность: O(N)

  • [(32)* (длина массива), где 32 — постоянное время, поэтому согласно рекуррентному дереву временная сложность имеет порядок N

Вспомогательное пространство: O(1)