【动态规划】-最小路径和(java)

news2025/2/24 18:28:56

最小路劲和--动态规划和内存压缩

  • 最小路径和
    • 题目描述
  • 动态规划解题思路:
  • 代码演示
  • 动态规划的内存压缩
  • 动态规划专题

最小路径和

题目描述

给定一个二维数组matrix,一个人必须从左上角出发,最后到达右下角 沿途只可以向下或者向右走,沿途的数字都累加就是距离累加和 返回最小距离累加和

示例:
在这里插入图片描述

动态规划解题思路:

以上图(0,1)位置为例,他的最小路径只能是(0,0) + (0,1),因为他只有左边位置,没有上面位置。
但(1,1)位置要选最小路径,就要比较,从(0,1)位置走到(1,1)位置和(1,0)位置走到(1,1)位置哪个距离最小了。
根据上面思路,我们先可以把第0行和第0列的值在动态规划表中初始化出来。
然后其他一般位置,不断比较这个位置的左边和上边两个位置哪个距离小,取哪个。
好了,开始代码演示

代码演示

  /**
     * 最小路径和
     * @param m
     * @return
     */
    public static int minPathSum1(int[][] m) {
        //行的长度
        int rowSize  = m.length;
        //列的长度
        int colSize = m[0].length;
        //初始化动态规划表
        int[][]dp = new int[rowSize][colSize];
        //先初始化(0,0)位置
        dp[0][0] = m[0][0];
        //再初始化第0行所有列的数据
        for (int i = 1;i < colSize;i++){
            dp[0][i] = dp[0][i - 1] + m[0][i];
        }
        //初始化第一列所有行的数据。
        for (int j = 1;j < rowSize;j++){
            dp[j][0] = dp[j - 1][0] + m[j][0];
        }
        //初始化一般位置
        for (int i = 1;i < rowSize;i++){
            for (int j = 1;j < colSize;j++){
                //比较左边位置和上面位置,取最小值,然后加上当前点本身的值,就是路径最小的值
                dp[i][j] = Math.min(dp[i-1][j],dp[i][j-1]) + m[i][j];
            }
        }
        //返回走到最后的最小路径
        return dp[rowSize - 1][colSize - 1];
    }

动态规划的内存压缩

动态规划表是个二维表,但其实我们只要其中一个数据,所以就可以想办法去压缩下内存。
我们只要其中一行的数据的话,就会变成一个一维数组。这个数组值不断向下面一行更新,最终到最后一行,我们取出右下角的值就可以了。

代码演示

    /**
     * 最小路径和 内存压缩。
     * @param m
     * @return
     */
    public static int minPathSum2(int[][] m) {
        //行的长度
        int rowSize  = m.length;
        //列的长度
        int colSize = m[0].length;
        //每次只保存一行的数据
        int[]nums = new int[colSize];
        //初始化初始位置
        nums[0] = m[0][0];
        //先把第一行初始化出来,因为没有上面位置,只依赖左边,所以相加就行。
        for (int i = 1;i < colSize;i++){
            nums[i] = nums[i - 1] + m[0][i];
        }
        //不断滚动向下更新 第二行---一直到最后一行
        for (int i = 1;i < rowSize;i++){
            //每行的第一个位置,因为没有左边数据,只依赖上面的数据,所以可以先初始化出来
            nums[0] = nums[0] + m[i][0];
            for (int j = 1;j < colSize;j++){
                //比较上面和左边的最小值,加上本身的值
                nums[j] = Math.min(nums[j - 1],nums[j]) + m[i][j];
            }
        }
        //返回到右下角的最小路径。
        return nums[colSize - 1];
    }

动态规划专题

象棋里马走到指定位置的方法数

最长回文子序列

leetcode.486. 预测赢家

背包问题–填满背包的最大价格

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用了7年的 source insight 3.5 背景色及字体配置(提升code效率)

文章目录 背景目的背景护眼色配置字体与编辑选项配置全局配置的保存与加载 背景 今天突然source insight3.5抽风&#xff0c;配置重置了&#xff0c;默认配置很难看。 找了一会儿才找到之前的备份配置&#xff0c;load后舒服了。 目的 在此记录并share用了7年的 source insi…

300页幻灯片图解数据安全风险评估(附下载)

为指导网络数据安全风险评估工作&#xff0c;发现数据安全隐患&#xff0c;防范数据安全风险,依据《中华人民共和国网络安全法》《中华人民共和国数据安全法》《中华人民共和国个人信息保护法》等法律法规&#xff0c;参照数据安全相关国家标准&#xff0c;全国信息安全标准化技…

ChatGPT与VBA:Excel操作一键搞定的全能助手

摘要 Excel是一款广泛应用于数据处理和分析的工具&#xff0c;而VBA&#xff08;Visual Basic for Applications&#xff09;是一种用于编程自动化Excel操作的语言。然而&#xff0c;对于非专业的Excel用户来说&#xff0c;VBA编程可能具有一定的难度。本文将探讨如何利用Chat…

不同规格的磁场线圈适用领域

磁场线圈基于毕奥-萨法尔定律&#xff0c;以绕组中通电流的形式复现磁场的线圈&#xff0c;用于复现标准磁场&#xff0c;是弱磁场计量测试领域最主要的标准器具之一。按所复现的磁场类型可分为恒定磁场线圈、交变磁场线圈、梯度磁场线圈、脉冲磁场线圈等&#xff0c;按结构可分…

AIX5.3安装Python3遇到的坑

最近在折腾AIX5.3&#xff0c;这是一款非常古老的power架构的服务器&#xff0c;目前IBM官方已经不维护&#xff0c;但是仍然在很多银行里跑着比较核心的业务&#xff0c;由于我们的客户大部分是面向银行&#xff0c;少不了要做AIX5.3上的应用软件适配。本文记录在AIX5.3上编译…

51单片机——DS18B20 温度传感器实验,小白讲解,相互学习

DS18B20 介绍 DS18B20 是由 DALLAS 半导体公司推出的一种的“一线总线&#xff08;单总线&#xff09;”接 口的温度传感器。与传统的热敏电阻等测温元件相比&#xff0c;它是一种新型的体积小、 适用电压宽、与微处理器接口简单的数字化温度传感器。 DS18B20 温度传感器具有如…

linuxOPS基础_linux常用自有服务(ntp,firewalld,crond)

linux常用自有服务 服务名含义ntpd用于同步计算机的系统时间的服务firewalld防火墙服务crond计划任务服务 ntp时间同步服务 NTP是网络时间协议(Network Time Protocol)&#xff0c;它是用来同步网络中各个计算机的时间的协议。 工作场景&#xff1a; ​ 公司开发了一个电商…

Jmeter教程 —— 简单的压力测试

Jmeter是一个非常好用的压力测试工具&#xff0c;可以用来做轻量级的压力测试&#xff0c;非常合适&#xff0c;只需要十几分钟&#xff0c;就能把压力测试需要的脚本写好。 什么是压力测试 顾名思义&#xff1a;压力测试&#xff0c;就是 被测试的系统&#xff0c;在一定的…

Android Studio查看第三方库依赖树

在Android开发过程中&#xff0c;我们或多或少都会引入第三方库&#xff0c;引入的库越多&#xff0c;越容易产生库之间的依赖冲突&#xff0c;所以我们今天一起来了解Android Studio查看第三方库依赖树。 下面就拿我遇到的问题还原一下&#xff1a; 之前接人容联客服系统的时候…

工作小技巧,封装if和Exception

在我们的工作中&#xff0c;经常会有这样的逻辑&#xff0c;就是判断一个参数是否合法&#xff0c;不合法就抛出异常&#xff0c;再由全局异常捕获后返回。 本文使用我编写的springboot日记本系统作为蓝本&#xff0c;&#xff0c;在已有项目的基础上改&#xff0c;源码下载地…

思科小型网络配置实例

一、配置思路 1.交换机上配置端口连接描述&#xff0c;在实际工作中很有用 2.外网配置&#xff0c;模拟外网&#xff1a;PC的IP地址200.200.200.2&#xff0c;Server的IP地址是200.200.200.3&#xff0c;网关都是200.200.200.1。SW-ISP的连接PC和Server-ISP的口属于vlan 3,&…

【vue】二:核心处理---vue的生命周期

文章目录 1.Vue生命周期的四个阶段&#xff0c;八个钩子2.vue的生命周期图例3. 初始阶段&#xff1a;虚拟DOM生成4. 挂载阶段&#xff1a;真实DOM生成5. 更新阶段&#xff1a;data变化重新渲染6. 销毁阶段&#xff1a;卸载所有&#xff0c;销毁vm 1.Vue生命周期的四个阶段&…

Appium利用xpath查找同级节点兄弟节点方法

当页面存在两个文件夹&#xff0c;结构相同&#xff0c;只有文件夹名称不同时&#xff0c;想要点击某一个文件夹上的某个控件。这个时候需要使用xpath定位。 1.由父节点定位子节点 driver.findElementByXPath(//XCUIElementTypeCell/XCUIElementTypeStaticText[name"标签…

Java网络开发(Tomcat)—— 用Jsp语法 到 实现数据的分页展示 到 只看自己的数据 + 模糊查询 迭代升级

目录 引出0.jsp的使用和语法 & 报错和解决&#xff08;1&#xff09;后端共享&#xff0c;前端获取 ${pageInfo}&#xff08;2&#xff09;如果想获取pageInfo这个对象的某个属性值&#xff0c;用 点 属性 ${pageInfo.pages}&#xff08;3&#xff09;如果想回传&#xff…

前端性能测试必备测试工具

我们在使用网站过程中&#xff0c;经常会遇到慢的问题&#xff0c;为了找到原因&#xff0c;一般需要借助工具进行检测&#xff0c;通过工具&#xff0c;可以检测出前端站点加载资源的相关详细情况。 今天&#xff0c;就给大家介绍几款前端性能测试分析工具&#xff0c;结合性能…

为什么性能测试PR单机版要升级到P-One一站式性能测试平台

目前市面上常用的性能测试工具均为单机版&#xff0c;导致了一些问题&#xff1a; 1.脚本无法进行共享&#xff1b; 2.执行管理无法进行统一化、协同化管理&#xff1b; 3.项目经理只能通过日报或者线下沟通获取当前项目进度&#xff1b; 4.对测试结果只能通过文件传输的方式进…

Linux安装Nginx详细教程

文章目录 下载安装包开始安装相关命令 下载安装包 官网下载&#xff1a;http://nginx.org/en/download.html 自己找一个安装目录 我这里进入到usr/local下创建一个安装软件目录 cd /usr/local mkdir softwore cd softwore使用ftp工具或者windows命令行将下载好的nginx安装包…

家居行业内卷?创新乏力?十大关键词解读IF ROOM如何定义未来主义家居

中商产业研究院今年早前发布的《中国家居市场前景及投资机会研究报告》显示&#xff0c;2021年中国定制家居行业的市场规模已经突破4000亿元&#xff0c;2016-2021年复合增长率达16%&#xff0c;行业保持良好的发展态势&#xff0c;预计2023年中国定制家居市场规模能突破5000亿…

2023年了, 你还不会使用node.js做压力测试?

背景 前些天刷抖音&#xff0c;看到网传的Java继父&#xff0c;求人攻击压测他的网站&#xff0c;这不得摩拳擦掌。 所以今天来聊聊如何对自己的项目、接口进行压力测试。 压力测试的目的 首先, 绝对不是为了压测、攻击别人的网站为乐。 1、探索线上系统流量承载的极限&…

jvm中类和对象定义存储基础知识 | 京东云技术团队

1 类文件数据结构类型 Class文件结构主要有两种数据结构&#xff1a;无符号数和表 •无符号数&#xff1a;用来表述数字&#xff0c;索引引用、数量值以及字符串等&#xff0c;比如 图1中类型为u1,u2,u4,u8分别代表1个字节&#xff0c;2个字节&#xff0c;4个字节&#xff0c…