Проблема с кодовым кодом 64: Минимальная сумма пути
В этой серии я собираюсь решать проблемы Leetcode medium в прямом эфире со своими друзьями, которые вы можете увидеть на нашем канале YouTube. Сегодня мы займемся проблемой Leetcode: 64. Минимальная Сумма Пути
Немного обо мне, у меня есть предложения от Uber Индия и Amazon Индия в прошлом, и в настоящее время я работаю на Booking.com в Амстердаме.
Мотивация к изучению алгоритмов
Решайте Проблемы С Leetcode и Получайте Предложения От Компаний Вашей Мечты
Постановка задачи
Учитывая сетку mxn, заполненную неотрицательными числами, найдите путь сверху слева направо, который минимизирует сумму всех чисел на своем пути.
Примечание: Вы можете перемещаться только вниз или вправо в любой момент времени
Пример 1:
Input: grid = [[1,3,1],[1,5,1],[4,2,1]] Output: 7 Explanation: Because the path 1 → 3 → 1 → 1 → 1 minimizes the sum.
Пример 2:
Input: grid = [[1,2,3],[4,5,6]] Output: 12
Ограничения:
м.длина
n[i].длина
1, n
0[i][j]
Обсуждение на Youtube
Решение
Подход 1: Грубая сила
Подход грубой силы включает в себя рекурсию. Для каждого элемента мы рассматриваем два пути, вправо и вниз, и находим минимальную сумму из этих двух. Он указывает, нужно ли нам сделать правильный шаг или шаг вниз, чтобы минимизировать сумму.
стоимость(i,[i][j] + min(стоимость(i+1, j), стоимость(i, j+1))
Следующий код реализует этот алгоритм:
Решение на C++
Java-решение
Анализ сложности
Временная сложность равна O(2^(m+n))
Временная сложность равна O(m+n)
Мы можем решить эту проблему за O (n * m) временной сложности.
Идея состоит в том, чтобы вычислить, для каждого индекса (i, j) найти минимальный путь от верхнего левого края до индекса (i, j).
Случаи первой строки и столбца
В первой строке мы можем перемещаться только вправо, и, следовательно, для достижения любого индекса в первой строке minpathsum представляет собой сумму всех элементов от верхнего левого до этого индекса.
Для первого столбца мы можем двигаться только вниз, и, следовательно, для достижения любого индекса в первой строке minpathsum представляет собой сумму всех элементов от верхнего левого до этого индекса.
Любой другой случай
Теперь, чтобы достичь индекса (i, j), у нас есть два варианта
мы достигаем от индекса (i-1,j)
или мы достигаем из индекса (i, j-1)
Мы выберем минимальный из этих двух индексов. Если мы применим ту же интуицию к остальной части сетки, мы найдем minpathsum сверху слева направо снизу.
Решение на C++
Java-решение
Анализ сложности
Временная сложность равна O(n*m)
Сложность пространства равна O(1)
Благодарим Вас за чтение и следите за этой публикацией, чтобы узнать больше о проблемах с LeetCode! 😃
Упрощенный код LeetCode
Оригинал: “https://dev.to/nilmadhabmondal/solve-leetcode-problems-and-get-offers-from-your-dream-companies-minimum-path-sum-1g5j”