Максимальная частота любого элемента массива, возможная не более чем на K приращений

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

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

Примеры:

Input: arr[] = {1, 4, 8, 13}, N = 4, K = 5 
Output:
Explanation: 
Incrementing arr[0] twice modifies arr[] to {4, 4, 8, 13}. Maximum frequency = 2. 
Incrementing arr[1] four times modifies arr[] to {1, 8, 8, 13}. Maximum frequency = 2. 
Incrementing arr[2] five times modifies arr[] to {1, 4, 13, 13}. Maximum frequency = 2. 
Therefore, the maximum possible frequency of any array element that can be obtained by at most 5 increments is 2.

Input: arr[] = {2, 4, 5}, N = 3, K = 4 
Output: 3

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

  • Отсортируйте массив arr[] .
  • Инициализируйте переменные sum = 0, start = 0 и результирующая частота res = 0 .
  • Пройдите массив по диапазону индексов [0, N – 1] и выполните следующие шаги:
    • Увеличить сумму на arr[end] .
    • Повторяйте цикл до тех пор, пока значение [(end – start + 1) * arr[end] – sum] не станет меньше K , и выполните следующие операции:
      • Уменьшите значение суммы на arr[start] .
      • Увеличьте значение start на 1 .
    • После выполнения вышеуказанных шагов все элементы в диапазоне [начало, конец] можно сделать равными, используя не более K операций. Поэтому обновите значение res как максимальное res и (конец — начало + 1).
  • Наконец, выведите значение res как частоту наиболее часто встречающегося элемента после выполнения K операций.

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

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