Уменьшите данный массив до 0, максимизировав сумму выбранных элементов

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

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

Примечание . Значение любого элемента массива не может быть меньше 0.

Примеры:

Input: arr[] = {6, 2, 4, 5} 
Output: 12
Explanation: Add 6 initially to the final sum.
The final sum becomes 6 and the remaining array elements {1, 3, 4}.
Add 3 with the sum. The sum becomes 9 and the remaining elements {0, 3}
Add 3 with the sum. The sum becomes 12 and only 0 remains in the array.
Add 0 with the sum. The sum remains unchanged.

Input: arr[] = {5, 6, 4}
Output: 12

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

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

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

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

  • Отсортируйте массив в порядке убывания .
  • Запустите цикл от 1 до N .
    • Для каждого индекса i значение, добавленное к окончательной сумме, будет (arr[i] – i) , так как оно будет добавлено после i уменьшения значения.
    • Поскольку значение суммы не может быть меньше 0 , добавьте max(arr[i]-i, 0) к окончательной сумме.
  • Верните окончательную сумму.

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


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