Публикации по теме 'dynamic-programming'
Литкод 518: Размен монет II
Заметки по алгоритму для меня и всех.
Прежде всего, эта заметка предназначена для того, чтобы отпраздновать получение моей женой статьи от Cancer Discovery 🎉. А ещё у её младшего брата день рождения🎂, лол. Так что сегодня совершенно особенный🤗.
Итак, давайте посмотрим на # 518.
Основы динамического программирования — Часть 2
Основы динамического программирования — Табулирование
Есть два метода решения проблемы с помощью динамического программирования. В этом посте мы увидим метод табуляции. Пожалуйста, обратитесь к моим основам динамического программирования — часть 1 для метода мемоизации.
Мемоизация Табулирование
Что такое динамическое программирование?
Это метод оптимизации по сравнению с простой рекурсией. Это значительно сокращает время, необходимое для решения проблемы для данного ввода...
День 1: Литкод | 121. Лучшее время для покупки и продажи акций
Difficulty: Easy Language: JavaScript
описание проблемы
Вы задали массив цен, где цены[i] — это цена данной акции на i-й день.
Вы хотите максимизировать свою прибыль, выбрав один день для покупки одной акции и выбрав другой день в будущем для продажи этой акции.
Верните максимальную прибыль, которую вы можете получить от этой сделки. Если вы не можете получить никакой прибыли, верните 0.
Объяснение 1: Купить во второй день (цена = 1) и продать в пятый день (цена = 6),..
Минимальные затраты на достижение вершины
Вот еще одна проблема из области динамического программирования, которую много раз задавали в интервью с небольшими вариациями. Постановка задачи довольно проста.
У вас есть лестница с n ступенями. У каждого шага есть своя стоимость, вы можете подняться на 1 или 2 шага за раз с любого шага. Единственным ограничением является то, что когда вы переходите с шага, вы должны оплатить стоимость, связанную с этим шагом.
Например, вы находитесь на 5-й ступени лестницы, и стоимость 5-й ступени..
LeetCode — арифметические срезы
Последовательность чисел называется арифметической, если она состоит не менее чем из трех элементов и если разница между любыми двумя последовательными элементами одинакова.
Например, это арифметическая последовательность:
1, 3, 5, 7, 9
7, 7, 7, 7
3, -1, -5, -9
Следующая последовательность не является арифметической.
1, 1, 2, 5, 7
Дан массив A с нулевым индексом, состоящий из N чисел. Срез этого массива — это любая пара целых чисел (P, Q), такая что 0 ‹= P ‹ Q ‹ N.
Срез (P, Q)..
Что такое динамическое программирование?
Динамическое программирование в основном представляет собой оптимизацию простой рекурсии . Везде, где мы видим рекурсивное решение с повторными вызовами одних и тех же входных данных, мы можем оптимизировать его с помощью динамического программирования (сокращенно DP). Идея состоит в том, чтобы просто хранить результаты подзадач, чтобы нам не приходилось повторно вычислить их, когда это необходимо позже.
Эта простая оптимизация снижает сложность времени с экспоненциальной до..
Динамическое программирование, часть 2: Преобразование повторения в восходящую программу
В этой статье объясняется, как рекуррентное соотношение 0/1 Knapsack можно преобразовать в код динамического программирования сверху вниз. Если вы хотите понять, как мы пришли к представленному ниже рекуррентному соотношению, пожалуйста, прочитайте статью Выявление и подход к проблеме динамического программирования .
Чтобы написать код для любого рекурсивного отношения, мы должны сначала определить базовое условие. Лучший способ сделать это — подумать о наименьшей возможной..