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.mzph.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…