1. 程式人生 > 實用技巧 >elasticsearch 7.8.X 資料型別與使用規範

elasticsearch 7.8.X 資料型別與使用規範

題目描述:

給定一個包含非負整數的mxn網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。

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

示例:

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

解題思路:

建立二維陣列dp,與原始網格的大小相同,dp[i][j]表示從左上角出發到(i,j)位置的最小路徑和。顯然,dp[0][0] = grid[0][0]。對於dp中的其餘元素,通過以下狀態轉移方程計算元素值。

  • i>0j=0時,dp[i][0] = dp[i-1][0] + grid[i][0]
    即求第一行結果
  • j>0i=0時,dp[0][j] = dp[0][j-1] + grid[0][j]即求第一列結果
  • i>0j>0時,dp[i][j] = Min(dp[i-1][j], dp[i][j-1]) + grid[i][j]即求剩餘結果
    //go
    func minPathSum(grid [][]int) int {
     if grid == nil || len(grid) == 0 || len(grid[0]) == 0 {
      return 0
     }
     row, col := len(grid), len(grid[0])
     dp := make([][]int, row)
        for i := 0; i < len(dp); i++ {
            dp[i] = make([]int, col)
        }
     dp[0][0] = grid[0][0]
     for i := 1; i < row; i++ {
      dp[i][0] = dp[i-1][0] + grid[i][0]
     }
     for j := 1; j < col; j++ {
      dp[0][j] = dp[0][j-1] + grid[0][j]
     }
     for i := 1; i < row; i++ {
      for j := 1; j < col; j++ {
       dp[i][j] = Min(dp[i-1][j], dp[i][j-1]) + grid[i][j]
      }
     }
     return dp[row-1][col-1]
    }
    
    func Min(x, y int) int {
        if x < y {
            return x
        }
        return y
    }
    

      地址:https://mp.weixin.qq.com/s/zy8TYe3qwrZa0imUR9j7Qg