国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

算法leetcode|64. 最小路徑和(rust重拳出擊)

這篇具有很好參考價值的文章主要介紹了算法leetcode|64. 最小路徑和(rust重拳出擊)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。



64. 最小路徑和:

給定一個包含非負(fù)整數(shù)的 m x n 網(wǎng)格 grid ,請找出一條從左上角到右下角的路徑,使得路徑上的數(shù)字總和為最小。

說明:每次只能向下或者向右移動一步。

樣例 1:

算法leetcode|64. 最小路徑和(rust重拳出擊),LeetCode力扣算法題目,rust,golang,算法,數(shù)據(jù)結(jié)構(gòu),后端

輸入:
	
	grid = [[1,3,1],[1,5,1],[4,2,1]]
	
輸出:
	
	7
	
解釋:
	
	因為路徑 1→3→1→1→1 的總和最小。

樣例 2:

輸入:
	
	grid = [[1,2,3],[4,5,6]]
	
輸出:
	
	12

提示:

  • m == grid.length
  • n == grid[i].length
  • 1 <= m, n <= 200
  • 0 <= grid[i][j] <= 200

分析:

  • 面對這道算法題目,二當(dāng)家的再次陷入了沉思。
  • 這道題和62. 不同路徑和63. 不同路徑 II 有些類似,但是這次是尋找最優(yōu)解,由于每個位置的數(shù)值不一定是多少,所以同樣沒法使用數(shù)學(xué)公式直接計算。
  • 那么動態(tài)規(guī)劃又成了此時的優(yōu)選。
  • 從左上角出發(fā),網(wǎng)格的第一行的每個元素只能從左上角元素開始向右移動到達(dá),網(wǎng)格的第一列的每個元素只能從左上角元素開始向下移動到達(dá),此時的路徑是唯一的,因此每個元素對應(yīng)的最小路徑和即為對應(yīng)的路徑上的數(shù)字總和。
  • 其他的點只能從上或者從左到達(dá),所以一個點的最優(yōu)路徑,一定經(jīng)過上面或者左面。從上到下,從左到右開始動態(tài)規(guī)劃,分解成了子問題。到達(dá)當(dāng)前點的最短路徑和,就是上面和左面點的最小路徑和中的較小值加上當(dāng)前點的值。
  • 這里一樣可以使用滾動數(shù)組優(yōu)化空間。

題解:

rust:

impl Solution {
    pub fn min_path_sum(grid: Vec<Vec<i32>>) -> i32 {
        let (rows, cols) = (grid.len(), grid[0].len());
        let mut dp = vec![0; cols];
        dp[0] = grid[0][0];
        (1..cols).for_each(|c| {
            dp[c] = dp[c - 1] + grid[0][c];
        });
        (1..rows).for_each(|r| {
            dp[0] += grid[r][0];
            (1..cols).for_each(|c| {
                dp[c] = dp[c].min(dp[c - 1]) + grid[r][c];
            });
        });
        return dp[cols - 1];
    }
}

go:

func minPathSum(grid [][]int) int {
    rows, cols := len(grid), len(grid[0])
	dp := make([]int, cols)
	dp[0] = grid[0][0]
	for c := 1; c < cols; c++ {
		dp[c] = dp[c-1] + grid[0][c]
	}
	for r := 1; r < rows; r++ {
		dp[0] += grid[r][0]
		for c := 1; c < cols; c++ {
			if dp[c-1] < dp[c] {
				dp[c] = dp[c-1] + grid[r][c]
			} else {
				dp[c] += grid[r][c]
			}

		}
	}
	return dp[cols-1]
}

c++:

class Solution {
public:
    int minPathSum(vector<vector<int>>& grid) {
        const int rows = grid.size(), cols = grid[0].size();
        int dp[cols];
        dp[0] = grid[0][0];
        for (int c = 1; c < cols; ++c) {
            dp[c] = dp[c - 1] + grid[0][c];
        }
        for (int r = 1; r < rows; ++r) {
            dp[0] += grid[r][0];
            for (int c = 1; c < cols; ++c) {
                dp[c] = min(dp[c], dp[c - 1]) + grid[r][c];
            }
        }
        return dp[cols - 1];
    }
};

python:

class Solution:
    def minPathSum(self, grid: List[List[int]]) -> int:
        rows, cols = len(grid), len(grid[0])
        dp = [0] * cols
        for c in range(cols):
            dp[c] = dp[c - 1] + grid[0][c]
        for r in range(1, rows):
            dp[0] += grid[r][0]
            for c in range(1, cols):
                dp[c] = min(dp[c], dp[c - 1]) + grid[r][c]
        return dp[cols - 1]


java:

class Solution {
    public int minPathSum(int[][] grid) {
        final int   rows = grid.length, cols = grid[0].length;
        final int[] dp   = new int[cols];
        dp[0] = grid[0][0];
        for (int c = 1; c < cols; ++c) {
            dp[c] = dp[c - 1] + grid[0][c];
        }
        for (int r = 1; r < rows; ++r) {
            dp[0] += grid[r][0];
            for (int c = 1; c < cols; ++c) {
                dp[c] = Math.min(dp[c], dp[c - 1]) + grid[r][c];
            }
        }
        return dp[cols - 1];
    }
}

非常感謝你閱讀本文~
歡迎【點贊】【收藏】【評論】三連走一波~
放棄不難,但堅持一定很酷~
希望我們大家都能每天進(jìn)步一點點~
本文由 二當(dāng)家的白帽子:https://le-yi.blog.csdn.net/ 博客原創(chuàng)~文章來源地址http://www.zghlxwxcb.cn/news/detail-612869.html


到了這里,關(guān)于算法leetcode|64. 最小路徑和(rust重拳出擊)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 算法leetcode|66. 加一(rust重拳出擊)

    給定一個由 整數(shù) 組成的 非空 數(shù)組所表示的非負(fù)整數(shù),在該數(shù)的基礎(chǔ)上加一。 最高位數(shù)字存放在數(shù)組的首位, 數(shù)組中每個元素只存儲 單個 數(shù)字。 你可以假設(shè)除了整數(shù) 0 之外,這個整數(shù)不會以零開頭。 1 = digits.length = 100 0 = digits[i] = 9 面對這道算法題目,二當(dāng)家的再次陷入了

    2024年02月14日
    瀏覽(23)
  • 算法leetcode|57. 插入?yún)^(qū)間(rust重拳出擊)

    給你一個 無重疊的 ,按照區(qū)間起始端點排序的區(qū)間列表。 在列表中插入一個新的區(qū)間,你需要確保列表中的區(qū)間仍然有序且不重疊(如果有必要的話,可以合并區(qū)間)。 0 = intervals.length = 10 4 intervals[i].length == 2 0 = intervals[i][0] = intervals[i][1] = 10 5 intervals 根據(jù) intervals[i][0] 按

    2024年02月09日
    瀏覽(24)
  • 算法leetcode|79. 單詞搜索(rust重拳出擊)

    算法leetcode|79. 單詞搜索(rust重拳出擊)

    給定一個 m x n 二維字符網(wǎng)格 board 和一個字符串單詞 word 。如果 word 存在于網(wǎng)格中,返回 true ;否則,返回 false 。 單詞必須按照字母順序,通過相鄰的單元格內(nèi)的字母構(gòu)成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內(nèi)的字母不允許被重復(fù)使用。

    2024年02月09日
    瀏覽(20)
  • 算法leetcode|60. 排列序列(rust重拳出擊)

    給出集合 [1,2,3,...,n] ,其所有元素共有 n! 種排列。 按大小順序列出所有排列情況,并一一標(biāo)記,當(dāng) n = 3 時, 所有排列如下: \\\"123\\\" \\\"132\\\" \\\"213\\\" \\\"231\\\" \\\"312\\\" \\\"321\\\" 給定 n 和 k ,返回第 k 個排列。 1 = n = 9 1 = k = n! 面對這道算法題目,二當(dāng)家的再次陷入了沉思。 如果模擬,按順序生成k個

    2024年02月12日
    瀏覽(19)
  • 算法leetcode|72. 編輯距離(rust重拳出擊)

    算法leetcode|72. 編輯距離(rust重拳出擊)

    給你兩個單詞 word1 和 word2 , 請返回將 word1 轉(zhuǎn)換成 word2 所使用的最少操作數(shù) 。 你可以對一個單詞進(jìn)行如下三種操作: 插入一個字符 刪除一個字符 替換一個字符 0 = word1.length, word2.length = 500 word1 和 word2 由小寫英文字母組成 面對這道算法題目,二當(dāng)家的再次陷入了沉思。 編

    2024年02月12日
    瀏覽(26)
  • 算法leetcode|54. 螺旋矩陣(rust重拳出擊)

    算法leetcode|54. 螺旋矩陣(rust重拳出擊)

    給你一個 m 行 n 列的矩陣 matrix ,請按照 順時針螺旋順序 ,返回矩陣中的所有元素。 m == matrix.length n == matrix[i].length 1 = m, n = 10 -100 = matrix[i][j] = 100 面對這道算法題目,二當(dāng)家的再次陷入了沉思。 可以每次循環(huán)移動一步,判斷移到邊界就變換方向,巧用數(shù)組可以減少邏輯判斷

    2024年02月08日
    瀏覽(20)
  • 算法leetcode|70. 爬樓梯(rust重拳出擊)

    假設(shè)你正在爬樓梯。需要 n 階你才能到達(dá)樓頂。 每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢? 1 = n = 45 面對這道算法題目,二當(dāng)家的再次陷入了沉思。 可以爬一階或者兩階臺階,那也就是說,除了初始位置,和第一階臺階,到達(dá)其他階臺階 n 的方式

    2024年02月12日
    瀏覽(19)
  • 算法leetcode|55. 跳躍游戲(rust重拳出擊)

    給定一個非負(fù)整數(shù)數(shù)組 nums ,你最初位于數(shù)組的 第一個下標(biāo) 。 數(shù)組中的每個元素代表你在該位置可以跳躍的最大長度。 判斷你是否能夠到達(dá)最后一個下標(biāo)。 1 = nums.length = 3 * 10 4 0 = nums[i] = 10 5 面對這道算法題目,二當(dāng)家的再次陷入了沉思。 可能想到要暴力嘗試或者是雙循環(huán)

    2024年02月08日
    瀏覽(49)
  • 算法leetcode|85. 最大矩形(rust重拳出擊)

    算法leetcode|85. 最大矩形(rust重拳出擊)

    給定一個僅包含 0 和 1 、大小為 rows x cols 的二維二進(jìn)制矩陣,找出只包含 1 的最大矩形,并返回其面積。 rows == matrix.length cols == matrix[0].length 1 = row, cols = 200 matrix[i][j] 為 ‘0’ 或 ‘1’ 面對這道算法題目,二當(dāng)家的再次陷入了沉思。 要不是剛做過 84. 柱狀圖中最大的矩形 這

    2024年02月08日
    瀏覽(17)
  • 算法leetcode|48. 旋轉(zhuǎn)圖像(rust重拳出擊)

    算法leetcode|48. 旋轉(zhuǎn)圖像(rust重拳出擊)

    給定一個 n × n 的二維矩陣 matrix 表示一個圖像。請你將圖像順時針旋轉(zhuǎn) 90 度。 你必須在 原地 旋轉(zhuǎn)圖像,這意味著你需要直接修改輸入的二維矩陣。 請不要 使用另一個矩陣來旋轉(zhuǎn)圖像。 n == matrix.length == matrix[i].length 1 = n = 20 -1000 = matrix[i][j] = 1000 面對這道算法題目,二當(dāng)家

    2024年02月01日
    瀏覽(37)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包