Максимальная прибыль после покупки и продажи акций с комиссией за транзакцию

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

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

Input: arr[] = {6, 1, 7, 2, 8, 4}
      transactionFee = 2
Output: 8 1

Input: arr[] = {7, 1, 5, 3, 6, 4}
       transactionFee = 1
Output: 5 1

Объяснение: Рассмотрим первый пример: arr[] = {6, 1, 7, 2, 8, 4}, transactionFee = 2

  1. Если мы покупаем и продаем в один и тот же день , мы не получим никакой прибыли , поэтому разница между покупкой и продажей должна быть не менее 1.
  2. С разницей в 1 день , если мы покупаем акцию на 1 рупию и продаем ее на 7 рупий с разницей в 1 день , что означает покупку во 2-й день и продажу на следующий день , то после оплаты комиссии за транзакцию в размере 2 рупий, т.е. 7- 1-2=4, мы получим прибыль в размере 4 рупий, так же, как если бы мы купили в 4-й день и продали в 5-й день с разницей в 1-й день, то мы получим прибыль в размере 4 рупий. Таким образом, общая прибыль составляет 8 рупий .
  3. При разнице в 2 дня мы не получим никакой прибыли .
  4. С разницей в 3 дня , если мы покупаем акции на 1 рупию и продаем их на 8 рупий с разницей в 3 дня , что означает покупку на 2-й день и продажу через 3 дня, то максимальная прибыль после оплаты комиссии за транзакцию составляет 2 рупии, т.е. 1-2=5 получим прибыль 5 рупий.
  5. С разницей в 4 дня , если мы покупаем акции за 1 рупию и продаем их за 4 рупии с разницей в 4 дня , что означает покупку в день 2 и продажу через 4 дня, то после оплаты комиссии за транзакцию в размере 2 рупий, т.е. 4-1 -2=1, получим прибыль 1 рупия .
  6. При разнице в 5 дней мы не получим никакой прибыли.

Подход:

  1. Пройдите весь массив с разницей каждого дня.
  2. Проверьте прибыль, вычитая цену каждого дня, включая комиссию за транзакцию.
  3. Отследите максимальную прибыль и сохраните diff_days, в которые мы получаем максимальную прибыль.
  4. Повторяйте вышеуказанные шаги, пока цикл не прервется.

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

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

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

Лучший подход:

То же, что https://www.geeksforgeeks.org/stock-buy-sell/, но также добавляет разные дни

Выход:

(8, 1)

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

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