Наименьшая пара целых чисел с минимальной разницей, чье побитовое исключающее ИЛИ равно N

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

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

Примеры:

Input: N = 26
Output: 10 16
Explanation:
The Bitwise XOR of 10 and 16 is 26 and the difference between them is minimum.

Input: N = 1
Output: 0 1

Наивный подход: самый простой подход к решению данной проблемы состоит в том, чтобы сгенерировать все возможные пары чисел в диапазоне [0, N] и вывести ту пару чисел, чье побитовое исключающее ИЛИ является заданным числом N , и оба числа являются наименьшими.

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

Эффективный подход. Описанный выше подход также можно оптимизировать на основе следующих наблюдений:

  • Рассмотрим двоичное представление любого числа «1100011» , тогда число может быть разделено вокруг их старшего бита (MSB) как «1000000» и «100011» , а побитовое XOR этих чисел является заданным числом.
  • Из приведенного выше разделения можно заметить, что число, образованное «1000000» (скажем, A ) и «100011» (скажем, B ), минимально, и их разница между ними минимальна, поскольку значение, образованное B , всегда меньше и ближе всего. к А .

Из приведенных выше наблюдений минимальное значение A и B , удовлетворяющее заданным критериям, состоит в том, чтобы разделить заданное число N вокруг его самого старшего бита (MSB) .

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

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

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