Минимальные приращения, сделанные в массиве, чтобы arr[i] мог сделать все остальные элементы равными

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

Учитывая массив arr[] размера N , задача состоит в том, чтобы найти минимальное приращение, требуемое для элементов в массиве, так что, если какой-либо элемент говорит, что arr[i] распределен среди других, сделать N – 1 элемент равным.

Примеры:

Input: arr[] = {0, 0, 3}, N = 3
Output: 3
Explanation: Increments can be done in the following way:

  • Increment element at index 0 by 1, so arr[] becomes {1, 0, 3}
  • Increment element at index 1 by 2. so arr[] becomes {1, 2, 3}

Now, if any element is chosen and distributed in others, makes all N – 1 elements equal.

Lets say,  

  • choose 1, add it to 2, so N – 1 elements become {3, 3}
  • choose 2, add it to 1, so N – 1 elements become {3, 3}
  • choose 3, add 2 of 3 to 1 and add 1 of 3 to 2, so N – 1 elements become {3, 3}

So, total increments = (1 + 2) = 3

Input: arr[] = {4, 3, 1, 6}, N = 4
Output:  4

Подход: Идея решения этой проблемы основана на наблюдении, что если (N-1)*mx , где mx — максимальный элемент массива, больше, чем сумма массива, тогда ответ будет просто (N-1) *mx – сумма. В противном случае, если (N-1)*mx меньше или равно сумме, возьмите временную переменную, скажем, temp , назначьте ей сумму / N – 1 . Если сумма по модулю N -1 не равна 0 , увеличьте temp на 1 и возьмите счетчик, чтобы сказать count , где count - это разница temp и mx . Обновить ответ = (count + mx) * (N – 1) и увеличить сумму на count.If sum равно (N-1)*mx return count , иначе вернуть count увеличенный с разницей (N-1)*mx и сумма . Выполните следующие шаги, чтобы решить проблему:

  • Инициализируйте переменные mx и sum как 0 , чтобы найти сумму и максимальный элемент массива.
  • Перебрать диапазон [0, N), используя переменную i , и выполнить следующие задачи:
    • Обновите значение mx как максимальное значение mx или arr[i] и добавьте значение arr[i] к переменной sum.
  • Инициализируйте переменную ans как (N-1)*mx.
  • Если ответ больше суммы , то в качестве ответа верните сумму ответа.
  • В противном случае инициализируйте переменную temp как sum/(N-1) + sum%(N-1).
  • Инициализируйте переменную count как temp – mx .
  • Установите значение ans как (count + mx)*(N-1).
  • Добавьте значение count к переменной sum.
  • Если sum равно ans, то вернуть значение count в качестве ответа, иначе вернуть count + ans – sum.

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


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