java数据结构与算法刷题-----LeetCode64. 最小路径和

利用Arcgis提取nc数据并计算区域年均温 1.下载数据。2.解压数据至不含中文的路径中。打开工具箱中的多维分析工具-创建NetCDF栅格图层,导入数据。3.打开工具箱中的数据管理工具-图层和表视图-创建栅格图层,导入数据,对输出数据进行命名,得到月均温栅格数据。4.选择工具箱-Spatial Analyst工具(空间分析工具)-地图代数-栅格计算器,计算全国一年年均温。​5.将其导出为.tif格式数据,方便后期使用。6.选择工具箱-Spatial Analyst工具(空间分析工具)-区域分析--以表格显示分区统计,得到分区域的气温数据。 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

很多人觉得动态规划很难,但它就是固定套路而已。其实动态规划只不过是将多余的步骤,提前放到dp数组中(就是一个数组,只不过大家都叫它dp),达到空间换时间的效果。它仅仅只是一种优化思路,因此它目前的境地和线性代数一样----虚假的难。

  1. 想想线性代数,在国外留学的学生大多数不觉得线性代数难理解。但是中国的学生学习线性代数时,完全摸不着头脑,一上来就是行列式和矩阵,根本不知道这玩意是干嘛的。
  2. 线性代数从根本上是在空间上研究向量,抽象上研究线性关系的学科。人家国外的教科书都是第一讲就帮助大家理解研究向量和线性关系。
  3. 反观国内的教材,直接把行列式搞到第一章。搞的国内的学生在学习线性代数的时候,只会觉得一知半解,觉得麻烦,完全不知道这玩意学来干什么。当苦尽甘来终于理解线性代数时干什么的时候,发现人家国外的教材第一节就把这玩意讲清楚了。你只会大骂我们国内这些教材,什么狗东西(以上是自己学完线性代数后的吐槽,我们同学无一例外都这么觉得)。

而我想告诉你,动态规划和线性代数一样,我学完了才知道,它不过就是研究空间换时间,提前将固定的重复操作规划到dp数组中,而不用暴力求解,从而让效率极大提升。

  1. 但是网上教动态规划的兄弟们,你直接给一个动态方程是怎么回事?和线性代数,一上来就教行列式和矩阵一样,纯属恶心人。我差不多做了30多道动态规划题目,才理解,动态方程只是一个步骤而已,而这已经浪费我很长时间了,我每道题都一知半解不理解,过程及其痛苦。最后只能重新做。
  2. 动态规划,一定是优先考虑重复操作与dp数组之间的关系,搞清楚后,再提出动态方程。而你们前面步骤省略了不讲,一上来给个方程,不是纯属扯淡吗?
  3. 我推荐研究动态规划题目,按5个步骤,从上到下依次来分析
  1. DP数组及下标含义
  2. 递推公式
  3. dp数组初始化
  4. 数组遍历顺序(双重循环及以上时,才考虑)
  5. dp数组打印,分析思路是否正确(相当于做完题,检查一下)

在这里插入图片描述

这道题是62题的衍生题,在62题的基础上,增加了一个条件,就是每个方块都有一个开销值,我们需要选择开销最小的哪条路,除此之外没有任何区别

可以先参考🏆LeetCode62. 不同路径https://blog.youkuaiyun.com/grd_java/article/details/135421514
先理解题目细节

在这里插入图片描述

  1. 起点在[0,0]位置,且只能向右或向下走,也就是说,我们到达每一个方格,只有两种情况,从上面过来的,或者从左面过来的。注意区分“走过去”和“从哪过来的区别”,这是解出这道题的关键。
  2. 我们依次走到每一个方块,不管其它的,只看当前方块,研究当前方块的最短路径
  3. 步骤如下:
  1. [0,0]位置:开销是1,到达这个位置只有一种方法,直接站上去,所以最短路径的开销就是1,故dp[0,0] = 1
  2. 第一行除起点[0,0]外的方块,想要到达它们同样只有一条路,那就是从起点一直向右走
  1. [0,1]位置,其本身开销为3,只有一种方法可以到达它,就是从左边过来,所以加上从起点到达左边这个[0,0]位置的最短开销1,一共为4. 因此 dp[0,1] = 4
  2. 同理[0,2]位置,本身开销1+起点到左边位置[0,1]开销4 = 5,故dp[0,2] = 5
  1. 第一列和第一行同理,除[0,0]外,只有从起点往下走这一条路
  1. [1,0]位置开销 = 本身开销1+[0,0]位置开销1 = 2
  2. **[2,0]位置开销 = 本身开销4+起点到[1,0]的开销 2=6 **
  1. 其余位置都有两种情况,从左边过来,或者从上面过来。因为这道题求最短开销,因此两个方向选小的那个
  1. [1,1]位置 = min{本身开销5+左边[1,0]开销2 = 7 , 本身开销5+ 上面[0,1]开销4 = 9} = 7. 从左边过来开销为7,上面过来开销为9,选小的7。
  2. [1,2]位置 = min{本身开销1+左边[1,1]开销7 = 8 , 本身开销1+ 上面[0,2]开销5 = 6} = 6
  3. [2,1]位置 = min{本身开销2+左边[2,0]开销6 = 8 , 本身开销2+ 上面[1,1]开销7 = 9} = 8
  4. [2,2]位置 = min{本身开销1+左边[2,1]开销8 = 9 , 本身开销1+ 上面[1,2]开销6 = 7} = 7
  1. 构建完dp数组,我们要返回的是起点[0,0]到终点[2,2]的最短路径,他就保存在dp[2,2]中。因为我们dp数组存储的就是起点到达每个位置的最短开销。
解题思路
  1. 暴力求解的思想,就是回溯算法,枚举每一种情况,拿到最大值,显然会做大量无效运算。
  2. 但是如果我们预先将其存储到dp数组,就可以直接通过dp[x], 获取dp数组中指定位置x的体力花费,而不用枚举。典型的动态规划题目
动态规划思考5步曲
  1. DP数组及下标含义

我们要求出的是到达某个方块,可以从哪里过来,过来的几种方法谁的开销最小,那么dp数组中存储的就是到达这里的最短路径开销。要求出谁的从起点到达后的最短开销呢?显然是某个方块,那么下标就是代表现在到了哪个方块,也就是代表到了某一方块后的最短开销。显然,需要2个下标表示,故这道题的dp数组需要二维数组

  1. 递推公式
  1. 由题意可知,只能选择向右走或者向下走,因此对于每个方块而言,只能是从上面过来,或者从左面过来。而第一行没有从上面来的路,因此只能从左面过来,也就是第一行都只有一条从左面来的路,直接计算从起点到它的开销即可。同理第一列,没有从左面来的路,只能从上面过来,也只有从上面过来这一条路,计算从起点到它的开销即可。
  1. 起点[0,0]的开销固定为其本身开销。F(0,0) = 其本身开销
  2. 第一行和第一列都固定为其唯一可通的路上的开销(行:从起点一直向右走。列是从起点一直向下走),F(0,n) = F(0,n-1)+其本身开销; F(n,0) = F(n-1,0)+其本身开销
  1. 之后每一个方块,都需要考虑从上面来的路,和从左面来的路。也就是到它上面的方块最短路径开销+其本身开销。和到它左面的方块的最短开销+其本身开销。选一个小的。
  2. 因此,可以得到,从第二行,第二列开始,递推公式变为,min(到左边方块的最短开销+其本身开销,到上面方块的最短开销+其本身开销)。F(n,n) = min(F(n-1,n)+其本身开销,F(n,n-1)+其本身开销)
  1. dp数组初始化

在这里插入图片描述

  1. 数组遍历顺序

双重循环,我们知道这道题,数组下标表示方块的位置,也就是所在行和列的位置。那么其中一层循环代表第几行,另外一层循环代表第几列。那么先遍历行还是列呢?我们发现,无论遍历哪个,都不影响。我们可以一列一列考虑,也可以一行一行考虑,因此,先遍历哪个都一样。我们这里选择先遍历行。

  1. 打印dp数组(自己生成dp数组后,将dp数组输出看看,是否和自己预想的一样。)

在这里插入图片描述

代码:时间复杂度O(mn).空间复杂度O(mn)

在这里插入图片描述

class Solution {
    public int minPathSum(int[][] grid) {
        if (grid == null || grid.length == 0 || grid[0].length == 0) return 0;
        int m = grid.length,n = grid[0].length;//获取行和列
        int dp[][] = new int[m][n];//dp数组表示每个方块,每个元素值代表从起点到这个方块的最短路径,下标代表其所在行和列
        dp[0][0] = grid[0][0];//到达第一个方块,只有一种方法,就是直接站上去,所以最短路径就是它本身开销
        //对于第一列来说,只有从上往下走这一条路,因此这条路上的每个方块的开销,就是从起点沿着这条路走到它的开销
        for(int i = 1;i<m;i++) dp[i][0] = dp[i-1][0]+grid[i][0];
        //第一行同理,只有从左往右这一条路
        for(int j = 1;j<n;j++) dp[0][j] = dp[0][j-1]+grid[0][j];
        //剩余的每个方块,都可以从上面过来,也可以从左面过来,我们选择值小的,也就是路径开销小的方向
        for(int i = 1;i<m;i++)
            for(int j = 1;j<n;j++)
                    dp[i][j] = Math.min(dp[i-1][j]+grid[i][j],dp[i][j-1]+grid[i][j]);
        return dp[m-1][n-1];//最后返回终点的最短路径开销
    }
}
对CryptoDriver里密钥格式定义的探索(1) 一入网络安全才发现深似海,传统汽车MCU码农转型之路异常艰难。在CP AUTOSAR中的CryptoDriver SWS对密钥格式的需求来源于RFC,其中要求了RSA、ECC、SHE等key material的格式。再往下看,我就有些迷糊了,例如关于RSA Private Key的OCTEE STRING格式根据IETF RFC8017,Public Key又得根据RFC5280,完全不得其解。所以今天先从生成密钥对,并对其进行解析开始,一步一步拆解。 阅读详情

相关推荐

关于三维全波电磁场仿真软件CST的安装和问题解决

百度网盘链接:https://pan.baidu.com/s/1RgWr8Qau1EzSOlh29SewFQ提取码:fzza这里是2023版本的CST,需要其他版本的uu们可以去官网或者其他人的网盘下载。

weixin_60728441的博客 3620

[C++]Leetcode超高效刷题顺序及题目详解笔记(持续更新中)

一.引言 博主最近在LeetCode上用C++练习。一路走来踩过一些坑,做了一些总结和笔记,分享给需要的人。 LeetCode网址:https://leetcode.com/ LeetCode中文版:https://leetcode-cn.com/ 二.刷题指南 LeetCode 是一个非常棒的平台,收集了许多公司的面试题目。相对其他平台而言,有着下面的几个优点: 题目全部来自业内大公司的真实面试不用处理输入输出 精力全放在解决具体问题上题目有丰富的讨论 可以参考别人的思路精确了解自己代码在所有提交代码中

cpb____的博客 2万+

使用广播星历进行 GPS 卫星位置的计算

目录1.计算卫星运动的平均角速度 n2.计算观测瞬间卫星的近地点角3.计算偏近点角4.计算真近点角 f5.计算升交角距 6.计算摄动改正项7.进行摄动改正 8.计算卫星在轨道面坐标系中的位置9.计算观测瞬间升交点的经度 L10.计算卫星在瞬时地球坐标系中的位置11.计算卫星在协议地球坐标系中的位置使用广播星历进行GPS卫星位置的计算的详细步骤如下:关于在广播星历中各参数的分布情况可以参考下图:首先根据广播星历中给出的参数 计算参考时刻(TOE) 的平均角速度 式中,GM为万有引力常数 G 与地球总质量

qq_43381998的博客 5570

LeetCode刷题汇总

剑指offer 剑指 Offer 03 数组中重复的数字 剑指 Offer 04 二维数组中的查找 剑指 Offer 05 替换空格 剑指 Offer 06 从尾到头打印链表 剑指 Offer 07 重建二叉树 剑指 Offer 09 用两个栈实现队列 剑指 Offer 10- I 斐波那契数列 剑指 Offer 10- II 青蛙跳台阶问题 剑指 Offer 11 旋转数组的最小数字 剑指 Offer 12 矩阵中的路径 剑指 Offer 13 机器人的运动范围 剑指 Offer 14- I 剪绳子 剑指

weixin_44171872的博客 2万+

QT实现Word读写

在windows环境下,我们可以通过ActiveQt实现Office自动化,相当于VB的VBA功能。 以下是一个实例: #include #include #include int main(int argc, char *argv[]) {     QApplication a(argc, argv);     //显示的打开一个word应用程序     QAxW

nameofhsw的专栏 1万+

GEE生物量预测:利用多源遥感数据和随机森林算法RF构建地上生物量(AGB)预测模型,并实现未来年份的生态变化模拟(大面积生物量反演)

数据融合策略:整合5类遥感产品(AGB、NDVI、LAI、土地覆盖、地形)时序特征构建:采用生长季中值法降低云污染影响机器学习优化分层采样保证数据代表性80棵决策树平衡精度与效率预测可靠性基准期R²达0.76需结合地面实测数据校正。

此星光明博客 419

【经典算法】LeetCode 64. 最小路径和(Java/C/Python3/Golang实现含注释说明,Easy)

解法思路特点优点缺点时间复杂度空间复杂度朴素DP填充DP表,状态转移每个位置的状态取决于上方和左方直观易懂空间占用大O(mn)O(mn)滚动数组优化DP只用一维数组,通过循环更新节省空间,利用上一行的值节省空间编程稍微复杂O(mn)O(n)

1632

SAP使用XCO框架创建RAP所有对象

通过XCO框架自动生成SAP ABAP开发对象。

DeveloperMrMeng的博客 553

力扣刷题-动态规划

为什么要刷leetcode? 要开始刷力扣啦,主要是希望自己通过刷题对于之前学习算法以及数据结构有一个更深入的理解,同时也为复试可能的机试做准备。自从上次蓝桥杯以后,已经有整整一年没有刷了,回忆起来之前在java俱乐部刷题的日子,zz老师其实真的是一个超级负责超级棒的老师~ 但是当时刷题,对于java的语法并不是十分熟悉,每次一遇到不会的题目就直接看解析,然后i,就是背代码。。。对于背后的算法没有真正弄清楚,同样的题目,放了几天又不会了,然后现在对于基本的分治算法、动态规划都已经完全没有印象了,后面上最喜欢

Magnolia_He的博客 338

3D Slicer学习记录(4)-PLUSapp连接双目相机Intel Realsense

plusapp是基于openIGTLink协议的免费的开源库和应用程序API接口,用于数据采集、预处理、校准和实时流成像、位置跟踪和其他传感器数据。这里以intel realsense双目相机为例详细的演示整个图像流导入到3D Slicer的流程。

weixin_39090239的博客 1346

INFFUS 2025 | DDBFusion:基于双重分解和贝塞尔曲线的统一图像分解与融合框架

现有的图像融合算法大多集中于网络架构和损失函数的设计,采用统一的特征提取策略,却忽略了冗余信息和有效信息的划分。然而,对于互补信息而言,统一的特征提取器可能并不适用。因此,本文提出了一种基于贝塞尔曲线图像增强和分层分解的统一图像融合算法,并构建了一个自监督学习任务来学习有意义的信息。其中,贝塞尔曲线旨在模拟不同的图像特征,并构建特殊的自监督学习样本,因此作者的方法不需要特定任务的数据,并且可以在公共自然图像数据集上轻松进行训练。同时,作者的双重分解自监督训练方法可以为模型赋予冗余信息过滤能力。

小白学视觉 308

【刷题目录1】按标签刷LeetCode热题HOT100 java题解分类汇总

1.栈 2.堆 3.贪心算法 4.排序 5.位运算 6.树 7.深度优先搜索 8.广度优先搜索 9.并查集 10.图 11.设计

乾坤未定,你我皆是黑马 3466

攻克低照度检测难题:YOLOv11主干网络增强新方案PE-YOLO详解

编码器部分# 解码器部分self.dec_conv2 = nn.Conv2d(512, 128, 3, padding=1) # 跳跃连接self.dec_conv3 = nn.Conv2d(256, 64, 3, padding=1) # 跳跃连接self.dec_conv4 = nn.Conv2d(128, 32, 3, padding=1) # 跳跃连接# 编码路径# 解码路径(带跳跃连接)

FJN110的博客 111

leetcode刷题记录

刷题过程记录

洪肥肥的博客 2063

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

LeetCode第64题:最小路径和(中等)

LeetCode第64题:最小路径和(中等) 题目:给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。 思路一:又想到了第62题失败的那个方法,改进之后还是没过。 class Solution { public int minPathSum(int[][] grid) { if(g...

new_whiter的博客 312

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

leetcode刷题记录(一百一十五)——64. 最小路径和

64. 最小路径和 - 力扣(LeetCode)64. 最小路径和 - 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例 1:[https://assets.leetcode.com/uploads/2020/11/05/minpath.jpg]输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。

weixin_45994787的博客 915

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【LeetCode 热题 100】64. 最小路径和——(解法三)空间优化

这段代码同样旨在解决 “最小路径和” 问题,但它是在自底向上动态规划方法基础上的进一步 空间优化。这种实现方式利用了状态转移的局部依赖性,将二维DP数组压缩为一维,显著降低了空间消耗,是解决此类问题的最高效实现之一。算法的核心思想是认识到,在计算第 行的路径和时,我们只需要第 行(上一行)的信息即可。因此,没有必要存储整个 的DP表,一个大小为 的一维数组就足以“滚动”着完成计算。状态压缩 (State Compression)状态定义(一维)迭代与状态滚动初始化:外层循环 :这个循环模拟了从第一行

最短的捷径就是绕远路,绕远路才是我的最短捷径。 976

LeetCode64-最小路径和-动态规划

题目描述 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入: [   [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小。 来源:力扣(LeetCode) 链接:https...

进修的CODER 768

[LeetCode]64. 最小路径和(java实现)dp

[LeetCode]64. 最小路径和(java实现)dp1. 题目2. 读题(需要重点注意的东西)3. 解法4. 可能有帮助的前置习题5. 所用到的数据结构与算法思想6. 总结 1. 题目 2. 读题(需要重点注意的东西) 思路(闫式dp分析法): 3. 解法 ---------------------------------------------------解法---------------------------------------------------: class Solution

cloud的博客 265

LeetCode刷题系列 -- 64. 最小路径和

题目: 给定一个包含非负整数的 mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/minimum-path-sum 思路:用一个 二维数组dist[][] 其中 di...

qq_33775774的博客 175

LeetCode 64最小路径和&65有效数字&66加一

有效数字 验证给定的字符串是否可以解释为十进制数字。加一,二进制求和

bigsai 3039

LeetCode64. 最小路径和

1、典型的dp思想(记忆) 2、一开始尝试使用dfs解决,最终不出意外的超时 3、dp方法思路: (1)建立一个dp数组,然后从左上角开始 (2)dp公式:dp[i][j]=grid[i][j]+min(dp[i-1][j],dp[i][j-1])(j=0取前面,i=0取后面) 代码: package com.leetCode.dp; public class leet64_t { public static void main(String[] args) { int[][] arr = {{1,

weixin_42673117的博客 210

【LeetCode热题100】打卡第21天:最小路径和&爬楼梯

大家好,我是知识汲取者,欢迎来到我的LeetCode热题100刷题专栏!精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。在此专栏中,我们将会涵盖各种类型的算法题目,包括但不限于数组、链表、树、字典树、图、排序、搜索、动态规划等等,并会提供详细的解题思路以及Java代码实现。如果你也想刷题,不断提升自己,就请加入我们吧!QQ群号:827302436。

热爱编程、热爱生活、热爱探索 1495

Leetcode 64 MinPathSum64 最小路径和 Java

64. 最小路径和 * 给定一个包含非负整数的 mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 * 说明:每次只能向下或者向右移动一步。 * 示例: * 输入: * [ * [1,3,1], * [1,5,1], * [4,2,1] * ] * 输出: 7 * 解释: 因为路径 1→3→1→1→1 的总和最小。 public class MinP...

weixin_43065507的博客 222

最小路径和(Java)

package leetCoder; /** * @author : zhaoliang * @program :newCoder * @description : 最小路径和 * @create : 2020/06/21 09:26 */ public class LeetCode64 { //给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 // //说明:每次只能向下或者向右移动一步。 public i

sinat_40968110的博客 380

64. 最小路径和 - 力扣(LeetCode)

给定一个包含非负整数的m x n网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。每次只能向下或者向右移动一步。输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小输入:grid = [[1,2,3],[4,5,6]]输出:12。

Dubhehug的博客 400
上一篇: java数据结构与算法刷题-----LeetCode63. 不同路径 II
下一篇: java数据结构与算法刷题-----LeetCode303. 区域和检索 - 数组不可变
ydenergy_殷志鹏
博客等级 码龄7年 5887粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值