https://leetcode.com/problems/final-prices-with-a-special-discount-in-a-shop/ Easy

Условие

В магазине действует специальная скидка: если вы покупаете товар с ценой prices[i], вы получаете скидку, равную prices[j], где j — минимальный индекс, такой что j > i и prices[j] <= prices[i]. Если такого индекса нет, скидка не применяется. Необходимо вернуть массив цен после применения скидок.

Решение

class Solution {
    fun finalPrices(prices: IntArray): IntArray {
        val stack = ArrayDeque<Int>()
        val result = prices.copyOf()

        for (i in prices.indices) {
            while (stack.isNotEmpty() && prices[stack.last()] >= prices[i]) {
                val idx = stack.removeLast()
                result[idx] -= prices[i]
            }
            stack.addLast(i)
        }

        return result
    }
}