Leetcode 最小路径和

在这里插入图片描述
这段代码解决的是LeetCode第64题“最小路径和”,其核心思想是动态规划(Dynamic Programming,简称DP)。以下是算法的具体解释:

1. 问题描述:

我们给定一个包含非负整数的 m x n 网格(grid),需要找出从左上角到右下角的路径,使得路径上的数字总和最小。每次只能向或向移动。

2. 动态规划思想:

我们用一个二维数组 dp 来记录每个位置上到达该位置的最小路径和

  • dp[i][j] 表示从起点 (0, 0) 到达位置 (i, j) 的最小路径和。
  • 初始条件:左上角 dp[0][0] 就是 grid[0][0]
  • 对于每个位置 (i, j),它的路径只能从上方左侧走过来:
    • 如果从上方 (i-1, j) 来,那么路径和是 dp[i-1][j] + grid[i][j]
    • 如果从左侧 (i, j-1) 来,那么路径和是 dp[i][j-1] + grid[i][j]
    • 我们选择这两个路径中的最小值,因此 dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j]

3. 边界情况:

  • 第一行(即 i == 0):只能从左边来,所以 dp[0][j] = dp[0][j-1] + grid[0][j]
  • 第一列(即 j == 0):只能从上边来,所以 dp[i][0] = dp[i-1][0] + grid[i][0]

4. 最终结果:

最后,dp[m-1][n-1](即右下角的值)就是我们所求的从左上角到右下角的最小路径和。

5. 算法时间复杂度和空间复杂度:

  • 时间复杂度:O(m * n),其中 m 是网格的行数,n 是列数。我们需要遍历整个 m x n 的网格,因此时间复杂度是 m * n
  • 空间复杂度:O(m * n),我们使用了一个额外的 dp 数组来存储每个位置的最小路径和。如果优化空间复杂度,也可以在原数组 grid 上进行修改。

总的来说,这个算法通过动态规划的方式,从起点开始,逐步计算出到每个位置的最小路径和,最终得到到达终点的最小路径。

Java solution

class Solution {public int minPathSum(int[][] grid) {//dp[i][j]表示到达i,j时的最小路径和int[][] dp = new int [grid.length][grid[0].length];dp[0][0] = grid[0][0];for(int i = 1; i < grid.length; ++i) { //i从1开始dp[i][0] = dp[i - 1][0] + grid[i][0];}for(int j = 1; j < grid[0].length; ++j) {//j从1开始dp[0][j] = dp[0][j - 1] + grid[0][j];}for(int i = 1; i < grid.length; ++i){for(int j = 1; j < grid[0].length; ++j) {dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];}}return dp[grid.length - 1][grid[0].length - 1];}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/454872.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

060_基于python智能旅游系统

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…

2k1000LA 开机自动登录, 非root 用户

问题:客户需要 开机自动免密登录,目前的系统是需要在开机界面的时候,需要使用键盘来输入密码的。 先来看看网上的资料:  然后是我自己的操作: 做好备份。 然后是更改文件: /etc/lightdm/lightdm.conf

物理海洋随学笔记(一)

频散与非频散特征 在物理海洋学中&#xff0c;非频散特征意味着波的传播速度&#xff08;相速度&#xff09;不依赖于波长&#xff0c;或者说所有波长的波以相同的速度传播。对于具有非频散特性的波&#xff0c;波长不同的波不会在传播过程中分离开&#xff0c;这与频散波不同&…

【软件测试】理论杂记 + Selenium

文章目录 测试用例万能公式基于测试对象黑盒测试方法 白盒测试Selenium选择器CSS选择器XPath选择器 等待常用API浏览器操作 测试用例万能公式 功能&#xff0c;界面&#xff0c;易用&#xff0c;兼容&#xff0c;安全&#xff0c;性能&#xff0c;网络 基于测试对象 界面测试…

SpringCloud学习记录|day6

学习材料 2024最新SpringCloud微服务开发与实战&#xff0c;java黑马商城项目微服务实战开发&#xff08;涵盖MybatisPlus、Docker、MQ、ES、Redis高级等&#xff09; 复习MQ&#xff0c;学过的&#xff0c;应该会轻松一点吧。 RabbitMQ 交换机没有存储功能&#xff0c;必须…

Jupyter Notebook汉化(中文版)

原版jupyter notebook是英文的&#xff0c;想要将其改为中文 在jupyter notebook所在环境输入以下命令 pip install jupyterlab-language-pack-zh-CN打开jupyter notebook&#xff0c;在设置语言中将其设置为中文

Java中的进程与线程(如果想知道Java中有关进程与线程的知识点,那么只看这一篇就足够了!)

前言&#xff1a;在现代计算机系统中&#xff0c;进程和线程是实现并发和高效任务管理的核心概念。理解这两者的区别和联系&#xff0c;不仅对软件开发者至关重要&#xff0c;还能帮助用户更好地理解计算机的工作原理。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容…

12、论文阅读:SpikeYOLO:高性能低能耗目标检测网络

SpikeYOLO:高性能低能耗目标检测网络 前言解释介绍相关工作论文提出的方法网络输入SpikeYOLO架构概述网络输出宏观设计微观设计I-LIF脉冲神经元LIFI-LIF实验代码前言 脉冲神经网络(Spiking Neural Networks, SNNs)具有生物合理性和低功耗的优势,相较于人工神经网络(Artif…

SCCB协议与IIC协议不同

SCCB开始信号与结束信号都与IIC协议的大概一致&#xff0c;这里就不细讲了 开始、结束信号参考&#xff1a;【I2C】IIC读写时序_iic读时序-CSDN博客 SSCB写时序&#xff1a; 即&#xff1a;start phase_1 phase_2 phase_3 stop SCCB读时序&#xff1a; 即&#xff…

推荐IDE中实用AI编程插件,目前无限次使用

插件介绍 一款字节跳动推出的“基于豆包大模型的智能开发工具” 以vscode介绍【pycharm等都可以啊】&#xff0c;这个插件提供智能补全、智能预测、智能问答等能力&#xff0c;节省开发时间 直接在IDE中使用&#xff0c;就不用在网页中来回切换了 感觉还可以&#xff0c;响应速…

2024/10/23 (easycovery密匙激活码为什么这么贵)

2023年12月23号出现的问题又在今天遇到了&#xff0c;fuck. 已知文件删除前原位置路径和最后访问时间&#xff0c;如何恢复文件数据。

SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载

文章目录 前言一、控制器层代码二、服务层代码三、代码亮点分析 前言 SpringBoot的同步excel导出方式中&#xff0c;服务会阻塞直到Excel文件生成完毕&#xff0c;如果导出数据很多时&#xff0c;效率低体验差。有效的方案是将导出数据拆分后利用CompletableFuture&#xff0c;…

oracle数据库---基本查询(单表查询、多表查询、子查询、分页查询、oracle内置函数、行列转换、集合运算)

思维导图 单表查询 数据准备 -- 练习的表如果存在 请先删除 -- 如果不存在直接创建 drop table t_owners;--业主表 create table t_owners (id number primary key,name varchar2(30),addressid number,housenumber varchar2(30),watermeter varchar2(30),adddate date,owner…

docker环境安装mongoDB实现平滑迁移实战

docker环境安装mongoDB实现平滑迁移实战 一、备份原始数据&#xff08;从别的服务器备份到当前服务器&#xff09;二、数据迁移三、迁移过程日志打印四、验证迁移数据准确性 一、备份原始数据&#xff08;从别的服务器备份到当前服务器&#xff09; 使用mongodump工具对原始mo…

【C++ 算法进阶】算法提升四

数组查询问题 &#xff08;数组优化&#xff09; 题目 数组为 {3 &#xff0c; 2&#xff0c; 2 &#xff0c;3 &#xff0c;1} 查询为&#xff08;0 &#xff0c;3 &#xff0c;2&#xff09; 这个查询的意义是 在数组下标0~3这个范围上 有多少个2 &#xff08;答案为2&…

《PP-OCRv1》论文精读:PaddleOCR是目前SOTA级别的OCR开源技术(截止2024年10月)

PP-OCR: A Practical Ultra Lightweight OCR System论文地址PP-OCRv2: Bag of Tricks for Ultra Lightweight OCR System论文地址PP-OCRv3: More Attempts for the Improvement of Ultra Lightweight OCR System论文地址PaddleOCR Github OCR工具库 43.5K个star PP-OCRv1由百度…

医院信息化与智能化系统(6)

医院信息化与智能化系统(6) 这里只描述对应过程&#xff0c;和可能遇到的问题及解决办法以及对应的参考链接&#xff0c;并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图&#xff0c;可以试试PlantUML&#xff0c;告诉GPT你的文件结构&#xff0c;让他给你对应的…

Java项目-基于springboot框架的疫苗接种管理系统项目实战(附源码+文档)

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…

PYQT5 简单项目实践

在VSCode编辑器我们通过引入pyqt5&#xff0c;用QTdesigner 实现拖拽实现图形化界面 下面我们实现一个简单项目实践一下吧 效果图&#xff1a; 用法&#xff1a;Python编写逻辑&#xff0c;用pyqt实现界面显示。 功能&#xff1a; 第一行把处理的数据文件拖拽到文本框中第二…

powerdesign字体太小,powerdesign Sql preview字体太小

一。powerdesign字体太小修改兼容性 右键点击PowerDesign软件图标-->点击属性-->兼容性-->点击下图中的红框 打勾“使用此设置修复此程序的缩放问题&#xff0c;而不是设置中的缩放问题” 打勾“替代高DPI缩放行为” 缩放执行改为“系统增强”&#xff0c;确定 重启…