Максимальная прибыль, которую можно получить, купив не более K книг

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

Даны целое число K и массив arr[] , состоящий из N целых чисел, где элемент массива arr[i] представляет цену i книги. Прибыль от покупки i книги представляет собой max(0, -1 * arr[i]) , задача состоит в том, чтобы найти максимальную прибыль, возможную при покупке не более K книг.

Примеры:

Input: arr[] = {-10, 20, -30, 50, -19}, K = 2
Output: 49
Explanation: 
Maximum profit can be obtained by buying the books arr[2](= -30). Profit = 30 and the book, arr[4](= -19) for the profit of 19.
Therefore, the total maximum profit obtained is, (30+19 = 49).

Input: arr[] = {10, 20, 16, 25}, K = 3
Output: 0

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

  • Отсортируйте массив arr[] по возрастанию.
  • Инициализируйте переменную, скажем, maxBenefit как 0 , чтобы сохранить максимальную прибыль.
  • Выполните итерацию в диапазоне [0, N-1], используя переменную i , и выполните следующие шаги:
    • Если K больше 0 , а arr[i] отрицательное, добавьте abs(arr[i]) к maxBenefit, а затем уменьшите значение K на 1.
  • Наконец, выведите значение maxBenefit как максимальную полученную прибыль.

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

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