LeetCode 熱題 100_最小路徑和(92_64_中等_C++)(多維動態規劃)

LeetCode 熱題 100_最小路徑和(92_64)

    • 題目描述:
    • 輸入輸出樣例:
    • 題解:
      • 解題思路:
        • 思路一(多維動態規劃):
      • 代碼實現
        • 代碼實現(思路一(多維動態規劃)):
        • 以思路一為例進行調試

題目描述:

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

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

輸入輸出樣例:

示例 1:
在這里插入圖片描述

輸入: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

題解:

解題思路:

思路一(多維動態規劃):

1、題目要求每次只能向下或者向右移動一步。則一個位置的元素可由左方和上方的位置移動而來。

  • dp[ i ][ j ]為路徑上的數字總和最小。
  • dp[ i ][ j ] = min(dp[ i-1 ][ j ],dp[ i ][ j-1 ])+grid[ i ][ j ]。
  • dp[ 0 ][ 0 ] = grid[ 0 ][ 0 ]。
  • dp[ 0 ][ j ] = dp[ 0 ][ j-1 ]+grid[ 0 ][ j ]。第一行的元素只能由左側元素移動得來。
  • dp[ i ][ 0 ] = dp[ i-1 ][ 0 ]+grid[ 0 ][ j ]。第一列的元素只能由上側元素移動得來。

2、復雜度分析:
① 時間復雜度:O(mn),其中 m 和 n 分別是網格的行數和列數。需要對整個網格遍歷一次,計算 dp 的每個元素的值。
② 空間復雜度:O(mn),其中 m 和 n 分別是網格的行數和列數。創建一個二維數組 dp,和網格大小相同(也可使用一維dp數組:參考LeetCode 熱題 100_不同路徑(91_62_中等_C++))。

代碼實現

代碼實現(思路一(多維動態規劃)):
class Solution {
public:// 計算從左上角到右下角的最小路徑和int minPathSum(vector<vector<int>>& grid) {// 創建一個dp數組,用于存儲從起點到達每個格子的最小路徑和vector<vector<int>> dp(grid.size(), vector<int>(grid[0].size()));// 初始化dp數組的起始位置,起點的路徑和就是grid[0][0]的值dp[0][0] = grid[0][0];// 處理第一行,從左到右累加// 因為只能從左邊的格子走到當前格子,所以每一行的第一個格子的路徑和是累加的for (int j = 1; j < grid[0].size(); j++) {dp[0][j] = dp[0][j - 1] + grid[0][j];}// 處理第一列,從上到下累加// 因為只能從上方的格子走到當前格子,所以每一列的第一個格子的路徑和是累加的for (int i = 1; i < grid.size(); i++) {dp[i][0] = dp[i - 1][0] + grid[i][0];}// 從(1, 1)開始,遍歷整個grid// 每個格子的最小路徑和是從它的上方格子或者左方格子中選擇較小的路徑和,再加上當前格子的值for (int i = 1; i < grid.size(); i++) {for (int j = 1; j < grid[0].size(); j++) {dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];}}// 返回右下角的最小路徑和,即dp數組的右下角元素return dp[grid.size() - 1][grid[0].size() - 1];}
};
以思路一為例進行調試
#include<iostream>
#include<vector>
using namespace std;class Solution {
public:// 計算從左上角到右下角的最小路徑和int minPathSum(vector<vector<int>>& grid) {// 創建一個dp數組,用于存儲從起點到達每個格子的最小路徑和vector<vector<int>> dp(grid.size(), vector<int>(grid[0].size()));// 初始化dp數組的起始位置,起點的路徑和就是grid[0][0]的值dp[0][0] = grid[0][0];// 處理第一行,從左到右累加// 因為只能從左邊的格子走到當前格子,所以每一行的第一個格子的路徑和是累加的for (int j = 1; j < grid[0].size(); j++) {dp[0][j] = dp[0][j - 1] + grid[0][j];}// 處理第一列,從上到下累加// 因為只能從上方的格子走到當前格子,所以每一列的第一個格子的路徑和是累加的for (int i = 1; i < grid.size(); i++) {dp[i][0] = dp[i - 1][0] + grid[i][0];}// 從(1, 1)開始,遍歷整個grid// 每個格子的最小路徑和是從它的上方格子或者左方格子中選擇較小的路徑和,再加上當前格子的值for (int i = 1; i < grid.size(); i++) {for (int j = 1; j < grid[0].size(); j++) {dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];}}// 返回右下角的最小路徑和,即dp數組的右下角元素return dp[grid.size() - 1][grid[0].size() - 1];}
};int main(int argc, char const *argv[])
{vector<vector<int>> grid={{1,3,1},{1,5,1},{4,2,1}};Solution s;cout<<s.minPathSum(grid);return 0;
}

LeetCode 熱題 100_最小路徑和(92_64)原題鏈接
歡迎大家和我溝通交流(????)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/80830.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80830.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/80830.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Sql刷題日志(day6)

一、筆試 1、insert ignore&#xff1a;在插入數據時忽略主鍵沖突或其他唯一性約束沖突。 如果插入的記錄會導致主鍵沖突&#xff08;如 actor_id 已存在&#xff09;&#xff0c;該語句不會報錯&#xff0c;而是直接忽略插入操作 語法&#xff1a; INSERT IGNORE INTO tab…

Java多線程入門案例詳解:繼承Thread類實現線程

本文通過一個簡單案例&#xff0c;講解如何通過繼承 Thread 類來實現多線程程序&#xff0c;并詳細分析了代碼結構與運行機制。 一、前言 在 Java 中&#xff0c;實現多線程主要有兩種方式&#xff1a; 繼承 Thread 類 實現 Runnable 接口 本文以繼承 Thread 類為例&#x…

Netty在線客服系統落地方案

本文不講然后代碼方面的東西&#xff0c;只聊方案&#xff01;&#xff01; 這方案基于 Spring Boot 2.6、Netty、MyBatis Plus、Redis 構建的一套支持 單體應用 的在線客服系統。 系統支持客戶自由與后臺客服實時聊天、客服未在線釘釘提醒通知客服、消息已讀未讀標記、消息已…

SDK游戲盾、高防IP、高防CDN三者的區別與選型指南

在網絡安全防護領域&#xff0c;SDK游戲盾、高防IP和高防CDN是常見的解決方案&#xff0c;但各自的功能定位、技術實現和適用場景差異顯著。本文將通過對比核心差異&#xff0c;幫助您快速理解三者特點并選擇適合的防護方案。 一、核心功能定位 SDK游戲盾 功能核心&#xff1a…

GRPO有什么缺點,如何改進?

一、GRPO的核心原理與設計目標 Group Relative Policy Optimization(GRPO)是DeepSeek團隊提出的一種強化學習算法,旨在解決傳統PPO(Proximal Policy Optimization)在大語言模型(LLM)訓練中的資源消耗問題。其核心創新在于 通過組內相對獎勵替代價值函數(Critic Model)…

登高架設作業指的是什么?有什么安全操作規程?

登高架設作業是指在高處從事腳手架、跨越架架設或拆除的作業。具體包括以下方面&#xff1a; 腳手架作業 搭建各類腳手架&#xff0c;如落地式腳手架、懸挑式腳手架、附著式升降腳手架等&#xff0c;為建筑施工、設備安裝、高處維修等作業提供安全穩定的工作平臺。對腳手架進行…

前端實現商品放大鏡效果(Vue3完整實現)

前端實現商品放大鏡效果&#xff08;Vue3完整實現&#xff09; 前言 在電商類項目中&#xff0c;商品圖片的細節展示至關重要。放大鏡效果能顯著提升用戶體驗&#xff0c;允許用戶在不跳轉頁面的情況下查看高清細節。本文將基于Vue3實現一個高性能的放大鏡組件&#xff0c;完整…

【C++11特性】Lambda表達式(匿名函數)

一、函數對象 在C中&#xff0c;我們把所有能當作函數使用的對象當作函數對象。 一般來說&#xff0c;如果我們列出一個對象&#xff0c;而它的后面又跟有由花括號包裹的參數列表&#xff0c;就像fun(arg1, arg2, …)&#xff0c;這個對象就被稱為函數對象。函數對象大致可分為…

大模型在肝硬化腹水風險預測及臨床方案制定中的應用研究

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的與創新點 1.3 研究方法與數據來源 二、肝硬化及大模型相關理論基礎 2.1 肝硬化概述 2.2 大模型技術原理 2.3 大模型在醫療領域的應用現狀 三、大模型預測肝硬化腹水術前風險 3.1 術前風險因素分析 3.2 大模型預測術前…

MCP:如何通過模型控制推理助力AI模型實現“深度思考”?

MCP:如何通過模型控制推理助力AI模型實現“深度思考”? | Echo_Wish專欄 大家好,我是Echo_Wish,一個在人工智能和Python領域深耕的技術達人。今天咱們聊一個相對前沿的技術話題——MCP (Model Control Propagation),它是如何幫助AI模型“深度思考”,讓機器變得更加智能的…

c++初識

C 基礎入門 本人寫了很多c的服務器和客戶端代碼&#xff0c;這篇文章主要是想幫助初學者快速入門c.這樣就能快速閱讀我的源碼&#xff0c;其實不難c只是比c多了些特性&#xff0c;其實不難&#xff0c;你們就理解為有更多的方式修改函數和調用函數的方式和重寫函數 C 基礎入門…

JVM 生產環境問題定位與解決實戰(八):實戰篇——正則表達式回溯引發的CPU 100%

本文已收錄于《JVM生產環境問題定位與解決實戰》專欄&#xff0c;完整系列見文末目錄 1. 引言 在上一篇文章中&#xff0c;我們深入剖析了OSSClient泄漏引發的FullGC風暴全鏈路排查過程。本文聚焦另一個經典線上問題——正則表達式回溯導致的CPU 100%。在Java應用中&#xff0…

100天精通Python挑戰總覽 | 零基礎到應用實戰!

目錄 ? 為什么發起100天挑戰&#xff1f;?整體學習路線規劃第一階段&#xff5c;基礎篇&#xff08;第1天 - 第50天&#xff09;第二階段&#xff5c;應用篇&#xff08;第51天 - 第100天&#xff09;Web開發篇爬蟲篇數據分析篇AI入門篇 &#x1f3c6;為什么這么劃分&#xf…

C++編譯之(5)-cmake/CMakeLists.txt的編譯使用教程

C++編譯之(5)-cmake/CMakeLists.txt的編譯使用教程 上一節,點這里 1、如何查看cmake的配置參數 那么如何查看當前配置的參數呢,我們可以使用-L參數 cmake .. -L # cmake .. -LAH完全使用命令行,則可以通過多次重復使用cmake … -DOPTION1=ON -D OPTION2=ON配置制定選項;并…

2025五一杯數學建模競賽思路助攻預定

2025五一杯數學建模競賽思路助攻預定&#xff08;思路內容見文末名片&#xff09; 一、概況 數學建模競賽是一項模擬面對實際問題尋求解決方案的活動&#xff0c;是一次近似 于“真刀真槍”的創新探索性實踐訓練。在豐富并活躍學生課外生活活動的同 時&#xff0c;數學建模競…

2025年綠色材料與制造技術國際學術會議(GMMT 2025)

重要信息 時間&#xff1a;2025年6月23-25日&#xff08;英國時間&#xff09; 地點&#xff1a;英國劍橋線下會場中國線上分會場 官網&#xff1a;www.icgmmt.com 部分 征稿主題 可生物降解材料垃圾和廢物的資源化綠色涂料與涂層 生物基聚合物的合成與應用 自然纖維增強復…

鴻蒙NEXT開發正則工具類RegexUtil(ArkTs)

import { FormatUtil } from ./FormatUtil;/*** 正則工具類* author CSDN-鴻蒙布道師* since 2025/04/27*/ export class RegexUtil {/*** 英文字母、數字和下劃線*/static readonly REG_GENERAL "^\\w$";/*** 數字*/static readonly REG_NUMBERS "^\\d$"…

Spring系列六:JdbcTemplate

JdbcTemplate &#x1f992;看一個實際需求&#x1f992;官方文檔&#x1f992;基本介紹&#x1f992;使用實例&#x1f4d5;需求說明&#x1f4d5;代碼演示 &#x1f992;看一個實際需求 實際需求: 如果程序員就希望使用spring框架來做項目, spring框架如何處理對數據庫的操作…

來聊聊JVM中安全點的概念

文章目錄 寫在文章開頭詳解safepoint基本概念什么是安全點?為什么需要安全點JVM如何讓線程跑到最近的安全點線程什么時候需要進入安全點JVM如何保證線程高效進入安全點如何設置安全點用一次GC解釋基于安全點的STW實踐-基于主線程休眠了解安全點的工作過程代碼示例基于日志印證…

搭建 Spark YARN 模式集群指南

在大數據處理領域&#xff0c;Apache Spark 憑借其卓越的性能和易用性廣受青睞。而 YARN&#xff08;Yet Another Resource Negotiator&#xff09;作為 Hadoop 的資源管理框架&#xff0c;能高效管理集群資源。將 Spark 與 YARN 結合&#xff0c;以 YARN 模式搭建集群&#xf…