Минимизируйте стоимость преобразования заданного массива от 1 до N с помощью заданных замен.

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

Даны два массива a[] и b[] длины N и целое число K (1 ≤ K ≤ N) . Все целые числа в массиве a[] лежат в диапазоне [1, K] . i -е значение в массиве b[] обозначает стоимость замены a[i] любым числом в диапазоне [1, N] . Задача состоит в том, чтобы найти минимальную стоимость замены элементов массива a[] для превращения его в перестановку от 1 до N .

Примечание. Перестановка от 1 до N содержит все значения от 1 до N в любом порядке, и ни одно значение не повторяется.

Примеры:

Input: K = 7, a[] = {1, 1, 3, 4, 5, 3, 7, 1}
b[] = {7, 5, 4, 8, 1, 3, 5, 2}
Output: 10
Explanation: In a[] some numbers are repeating which are 1, 1, 3, 3, 1.
Now, make two 1’s and one 3 unique.
Select a[1], a[5] and a[7] and replace them with 2, 6, and 8 to make array a permutation of 1 to 8.
The total cost is b[1] + b[5] + b[7] = 5 + 3 + 2 = 10.
This is the minimum cost to make a[] a permutation of 1 to 8.
Now, a[] becomes {1, 2, 3, 4, 5, 6, 7, 8}

Input: K = 3, a[] = {3, 1, 2}
b[] = {5, 3, 4}
Output: 0
Explanation: a[] is already a permutation of 1 to 3. So no need to replace any value.

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

  • Инициализируйте карту для хранения a[i] и b[i] .
  • Инициализируйте вектор, чтобы сохранить минимальный ответ.
  • Теперь пройдитесь по обоим массивам.
    • Если a[i] отсутствует на карте, сохраните a[i] как ключ, а b[i] как значение на карте.
    • В противном случае, если a[i] присутствует, а значение a[i] , хранящееся в карте, меньше, чем b[i] , сохраните существующее значение a[i] в векторе v и измените значение в карте на b[ я] .
    • В противном случае сохраните b[i] в векторе v .
  • Отсортируйте вектор v .
  • Инициализируйте переменную ans = 0.
  • Теперь пройдитесь по вектору (K — размер карты) раз и просуммируйте все значения вектора в ans .

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


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