Сложность: medium
Вам дан массив prices, где prices[i] - это цена данной акции в i-й день, и целое число fee, представляющее собой комиссию за сделку. Найдите максимальную прибыль, которую вы можете получить. Вы можете совершить сколько угодно сделок, но за каждую сделку вам придется заплатить комиссию. Примечание: Вы не можете совершать несколько сделок одновременно (то есть вы должны продать акции, прежде чем купить их снова). Комиссия за сделку взимается только один раз за каждую покупку и продажу акций.
Пример:
Input: prices = [1,3,2,8,4,9], fee = 2
Output: 8
👨💻 Алгоритм:
1⃣Инициализируйте две переменные: cash, представляющую максимальную прибыль без наличия акций, и hold, представляющую максимальную прибыль с наличием акций.
2⃣Пройдите по каждому элементу массива prices и обновите значения cash и hold, используя текущую цену и комиссию.
3⃣Верните значение cash, которое будет максимальной прибылью без наличия акций.
😎 Решение:
func maxProfit(_ prices: [Int], _ fee: Int) -> Int {
var cash = 0
var hold = -prices[0]
for price in prices {
cash = max(cash, hold + price - fee)
hold = max(hold, cash - price)
}
return cash
}Ставь 👍 и забирай 📚 Базу знаний