Максимальная прибыль после покупки и продажи акций с комиссией за транзакцию
Опубликовано: 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 день , если мы покупаем акцию на 1 рупию и продаем ее на 7 рупий с разницей в 1 день , что означает покупку во 2-й день и продажу на следующий день , то после оплаты комиссии за транзакцию в размере 2 рупий, т.е. 7- 1-2=4, мы получим прибыль в размере 4 рупий, так же, как если бы мы купили в 4-й день и продали в 5-й день с разницей в 1-й день, то мы получим прибыль в размере 4 рупий. Таким образом, общая прибыль составляет 8 рупий .
- При разнице в 2 дня мы не получим никакой прибыли .
- С разницей в 3 дня , если мы покупаем акции на 1 рупию и продаем их на 8 рупий с разницей в 3 дня , что означает покупку на 2-й день и продажу через 3 дня, то максимальная прибыль после оплаты комиссии за транзакцию составляет 2 рупии, т.е. 1-2=5 получим прибыль 5 рупий.
- С разницей в 4 дня , если мы покупаем акции за 1 рупию и продаем их за 4 рупии с разницей в 4 дня , что означает покупку в день 2 и продажу через 4 дня, то после оплаты комиссии за транзакцию в размере 2 рупий, т.е. 4-1 -2=1, получим прибыль 1 рупия .
- При разнице в 5 дней мы не получим никакой прибыли.
Подход:
- Пройдите весь массив с разницей каждого дня.
- Проверьте прибыль, вычитая цену каждого дня, включая комиссию за транзакцию.
- Отследите максимальную прибыль и сохраните diff_days, в которые мы получаем максимальную прибыль.
- Повторяйте вышеуказанные шаги, пока цикл не прервется.
Ниже приведена реализация вышеуказанного подхода:
Временная сложность: O(N 2 )
Вспомогательное пространство: O(1)
Лучший подход:
То же, что https://www.geeksforgeeks.org/stock-buy-sell/, но также добавляет разные дни
Выход:
(8, 1)
Временная сложность : O(N)
Вспомогательное пространство : O(1)