GitHub
Задачи с собеседований: размен
Проблема размена часто встречается в интервью Facebook и Amazon. Вам даются номиналы монет и желаемую сумму денег. Исходя из этого, вам нужно написать функцию для вычисления наименьшего количества монет, которое вам нужно, чтобы собрать эту сумму. Если вы не можете получить указанную сумму денег ни с одной комбинацией монет, вы возвращаете -1.
Вот три способа решить эту проблему:
- Перебор (брутфорс)
- Нисходящее динамическое программирование с мемоизацией
- Восходящее динамическое программирование с табуляризацией
Давайте посмотрим на решение, использующее восходящее динамическое программирование с табуляризацией на C++:
Для каждой итерации внутреннего цикла мы получаем решение с denoms[j] и сохраняем его в x. Мы также получаем решение без denoms[j] и сохраняем его в y. Таким образом мы можем ссылаться на более ранние решения, чтобы избежать дублирования вычислений.
Для каждой монеты номинала может быть только две возможности: включить ее или исключить. Мы знаем, что если монета denom[j] больше, чем amount, то x устанавливается в 0, так как включение ее в рассмотрение невозможно.
Временная сложность равна *O (amount * denomsLength), что является количеством итераций цикла for.
Примечание. Каждый из этих трех методов оценивается через временную сложность, а это означает, что временная сложность является важным понятием, которое необходимо понимать, чтобы добиться успеха в проблеме обмена монет.
-
Аналитика магазинов3 недели назад
Мобильный рынок Ближнего Востока: исследование Bidease и Sensor Tower выявляет драйверы роста
-
Видео и подкасты для разработчиков3 недели назад
Разбор кода: iOS-приложение для управления личными финансами на Swift. Часть 1
-
Новости3 недели назад
Видео и подкасты о мобильной разработке 2025.47
-
Разработка4 недели назад
100 уроков о том, как я довёл своё приложение до продажи за семизначную сумму

