Найти двоичные перестановки заданного размера, отсутствующие в массиве

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

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

Примеры:

Input: N = 3, arr[] = {“101”, “111”, “001”, “010”, “011”, “100”, “110”}
Output: 000
Explanation: Only 000 is absent in the given array.

Input: N = 2, arr[] = {“00”, “01”}
Output: 10 11

Подход: Данную проблему можно решить, найдя все двоичные строки размера N с помощью Backtracking, а затем распечатав те строки, которых нет в массиве arr[] . Выполните следующие шаги, чтобы решить проблему:

  • Инициализируйте unordered_set строк S , который хранит все строки в массиве arr[] .
  • Инициализируйте переменную, скажем, total , и установите ее как степень 2 N , где N — размер строки.
  • Переберите диапазон [0, total), используя переменную i , и выполните следующие шаги:
    • Инициализируйте пустую строковую переменную num как «» .
    • Выполните итерацию в диапазоне [N – 1, 0], используя переменную j , и если значение побитового И для i и 2 j истинно , затем вставьте символ 1 в строку num . В противном случае нажмите символ 0 .
    • Если число num отсутствует в наборе S , то выведите строку num как одну из результирующей строки.
  • После выполнения вышеуказанных шагов, если в массиве присутствуют все возможные двоичные строки, выведите «-1» .

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


Временная сложность: O(N* 2N )
Вспомогательное пространство: O(K), где K — размер массива

РЕКОМЕНДУЕМЫЕ СТАТЬИ