Максимально возможное количество веревок последовательной длины путем соединения заданных веревок.

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

Учитывая массив A[ ] размера N , где каждый элемент массива представляет собой длину веревки, задача состоит в том, чтобы найти количество веревок последовательной длины, которые можно создать, соединив заданные веревки, начиная с длины 1 .

Примеры :

Input: N = 5, A[ ] = {1, 2, 7, 1, 1}

Output:
Explanation: 
Length | Ropes 
    1 | [1] 
    2 | [1, 1] 
    3 | [1, 2] 
    4 | [1, 2, 1] 
    5 | [1, 2, 1, 1]

Input N = 5, A = {1, 3, 2, 4, 2} 
Output: 12 

Подход: эту проблему можно решить, используя тот факт, что если мы можем создать веревки длиной в диапазоне [1, K] и остается веревка длины L такая, что (L <= K + 1) , то мы можем создать веревки диапазона [1, K+L] , добавляя веревку длины L к каждой веревке диапазона [max(1, K-L+1), K] . Итак, чтобы решить проблему, сначала отсортируйте массив, а затем пройдитесь по массиву и каждый раз проверяйте, меньше или равен ли текущий элемент максимальной последовательной длине, которую мы получили + 1. Если найдено, что это правда, добавьте этот элемент к максимальному последовательная длина. В противном случае верните ответ.

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

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