Найдите двоичную строку N-длины, имеющую максимальную сумму элементов из заданных диапазонов

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

Дан массив пар ranges[] размера M и целое число N , задача состоит в том, чтобы найти двоичную строку длины N такую, чтобы сумма элементов строки из заданных диапазонов была максимально возможной.

Примеры:

Input: N = 5, M = 3, ranges[] = {{1, 3}, {2, 4}, {2, 5}}
Output: 01100
Explanation:
Range [1, 3]: Freq of 0’s = 1, Freq of 1’s = 2. Sum = 1*2 = 2
Range [2, 4]: Freq of 0’s = 1, Freq of 1’s = 2. Sum = 1*2 = 2
Range [2, 5]: Freq of 0’s = 2, Freq of 1’s = 2. Sum = 2*2 = 4
Therefore, the required sum = 2 + 2 + 4 = 8, which is the maximum possible.

Input: N = 6, M = 1, ranges = {{1, 6}}
Output: 000111

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

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

Ниже приведена реализация описанного выше подхода.

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