JavaScript|LeetCode|动态规划|64.最小路径和

【JavaScript算法实践】最短路径算法 目录前言一、Dijkstra算法算法实现二、Floyd-Warshall 算法算法实现 前言 最短路问题是图问题中的经典问题,这类问题在生活中非常常见,我们(特别是生活在大城市的人)出门在外,无论是驾车还是乘坐公共交通工具,甚至步行,都会求助于高德地图、百度地图等定位和导航程序。我们可能会有其他的考虑:例如如何乘车、换乘?如何避开拥堵路段?但根本的问题仍然是:哪条路径最短? 在图问题中,这一问题对应的算法被称为最短路径算法。本文介绍其中两种非常著名算法的JavaScript实现: Dijkstra算法和F 阅读详情

法1:动态规划(未优化版)
想法:

  1. 对于第 i 行、第 j 列位置,从左上角到此位置的最小路径为:
    dp[i][j] = grid[i][j] + min{dp[i - 1][j] , dp[i][j - 1]}
    dp[i - 1][j] 表示从上走到下到达[i][j];dp[i][j - 1]表示从左走到右到达[i][j]
/** 
* @param {number[][]} grid
* @return {number} 
*/
var minPathSum = function(grid) {    
    var dp = [], temp = [];    
    var i = 0, j = 0, m = grid.length, n = grid[0].length;    
    for(i = 0; i < m; i++) {        
        for(j = 0; j < n; j++) {            
            temp[j] = 0;        
        }        
        dp[i] = temp;        
        temp = [];    
    }    
    for(i = 0; i < m; i++) {        
        for(j = 0; j < n; j++) {            
            if(i - 1 >= 0 && j - 1 >= 0) {                
                dp[i][j] = grid[i][j] + Math.min(dp[i - 1][j], dp[i][j - 1]);                
                continue;            
            }            
            if(i - 1 >= 0 && j - 1 < 0) {                
                dp[i][j] = grid[i][j] + dp[i - 1][j];                
                continue;            
            }            
            if(i - 1 < 0 && j - 1 >= 0) {                
                dp[i][j] = grid[i][j] + dp[i][j - 1];                
                continue;            
            }            
            dp[i][j] = grid[i][j];        
        }    
    }    
    return dp[m - 1][n - 1];
};

法2:动态规划(优化)
看了题解,参考做了一些优化。
想法:

  1. 右下角的列坐标必定等于grid的最大列坐标
  2. 行坐标作为外循环,列坐标作为内循环;则经过一轮内循环后,列坐标与右下角列坐标相等,若此时行坐标与右下角行坐标相等,则自动退出循环
  3. 则:实际上只需要一个一维数组,来保存每行的最短路径情况。即dp[],长度为grid[0].length。假设已经访问了第一行,访问到第二行时,如第j位置时,可选择min{dp[j - 1], dp[j]};此时dp[j - 1]是已经更新的到达第2行第j - 1列的最短路径(当前要达到位置的左方),dp[j]是尚未更新的到达第1行第j列的最短路径(当前要到达位置的上方)。这样dp中保存的是:左上角到达最新一行中每个位置的最短路径。
/** 
* @param {number[][]} grid 
* @return {number} 
*/
var minPathSum = function(grid) {    
    var dp = [];    
    var i = 0, j = 0, m = grid.length, n = grid[0].length;    
    for(j = 0; j < n; j++) {        
        dp[j] = 0;    
    }    
    for(i = 0; i < m; i++) {        
        for(j = 0; j < n; j++) {            
            if(j == 0) { // 在第一列,只能从上边来                
                dp[j] = dp[j];            
            }            
            else if(i == 0) { // 在第一行,只能从左边来                
                dp[j] = dp[j - 1];            
            }            
            else {                
                dp[j] = Math.min(dp[j - 1], dp[j]);            
            }            
            dp[j] = dp[j] + grid[i][j];        
        }    
    }    
    return dp[n - 1];
};
javascript:实现最小路径和算法(附完整源码) 阅读详情

相关推荐

js最短路径算法

通过网页展示最短路劲算法的过程,js完成

js实现--动态规划算法

动态规划的思想 它的思想就是把一个大的问题进行拆分,细分成一个个小的子问题,且能够从这些小的子问题的解当中推导出原问题的解。同时还需要满足以下两个重要性质才能进行动态规划 最优子结构性: 既所拆分的子问题的解是最优解。 子问题重叠性质: 既在求解的过程当中,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次。动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只计算一次,然后将其计...

阳光下的冷静的博客 6016

RISC-V IP中的ITCM/DTCM与Slave-AHB接口设计解析

本文深入解析RISC-V IP中ITCM/DTCM与Slave-AHB接口的设计要点,涵盖TCM架构原理、总线协议实现及性能优化策略。通过实际案例展示如何实现单周期访问延迟,解决跨时钟域同步等关键问题,为嵌入式系统提供确定性内存访问方案。特别探讨了AHB总线仲裁机制和RTL实现技巧,助力开发者构建高效可靠的RISC-V处理器子系统。

weixin_28419039的博客 529

数据结构のJavaScript实现之最短路径(Dijkstra算法和Floyd算法)

Dijkstra算法——求某一个点到其他所有点的最短路径 Dijkstra算法和最小生成树的Prim算法又有异曲同工之妙。都是要将顶点分成两坨,一坨未访问的,一坨已访问的,通过循环将未访问的一次次拉下水,变成访问过的,在这个过程中,每次都找权值最小的路径。 以A点为例: 初始化A点到所有其他点的距离dis = [0, ∞, ∞](依次代表[【AA】【AB】【AC】]); 设当前点为A,...

等时钟成长 1789

君正T31x metartc集成测试

metartc为国内杨大侠部分开源的一款用于嵌入式领域webrtc库,它与谷歌官方webrtc相比,编译到君正平台的可执行文件仅有5M即可实现webrtc的通信。1. 目前实现的是基于开源版v5.0-b0版本做的简单修改,官方的好几个版本都多少缺点东西,我这里给整理了一下。目前是局域网连接的webrtc,后续尝试走stun和turn试一下NAT穿越的效果。

fsmpeg的博客 3158

接上篇,记录一下【Unity 3D对博途PLCSIM的通讯】文章有点长~仔细看,很基础

本文参考链接:西门子PLC丨PROFINET通讯仿真(虚拟通讯)做了一些更详细的优化,本文使用的类库并非原作者使用的类库。 首先,昨天项目已经创建好了,这边也加了一个InputField和一个Button,可以实现简单的读取,ok开始。 放入准备好的通讯类库; 新建一个博途的项目,本次测试使用博途V15,测试环境为虚拟机,Unity运行在本地计算机,建立博途项目流程如下: 新建项目,右键项目-属性-保护-对勾,如图: 不得不说的是,仿真中加密的FB块是无法下载的哦~ 添加CPU...

NS_Speak(IVAV) 8060

【leetcode】64 最小路径和(动态规划)

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

zjwreal 840

DAB协议解读ETSI TS 103 461

数字信号广播( Digital Audio Broadcasting 简称DAB)是继AM、FM传统模拟广播之后的第三代广播--数字信号广播,它提供了接近CD质量的声音,广播及商机无限的附加数据服务,具有抗噪声、抗干扰、抗电波传播衰落、适合高速移动接收等优点,保证固定、携带及移动时接收信号的质量。DAB的原始版本使用MP2音频编解码器。该系统的升级版本于2007年2月发布,称为DAB+,它使用基于改进的离散余弦变换(MDCT)的HE-AACv2(AAC+)音频编解码器。

qflook的博客 4477

【算法入门】LeetCode 64:最小路径和 - 动态规划(Java & JavaScript)|力扣64. 最小路径和题解:Java与JavaScript动态规划实现|寻找网格中的最短路径

最小路径和问题是一个经典的动态规划问题,通过构建 DP 表,我们能够高效地计算出从左上角到右下角的最小路径和。希望本文能帮助你更好地理解这一问题及其解决方案,掌握动态规划的基本思想是解决许多类似问题的关键。定义dp[i][j]表示从左上角(0, 0)到(i, j)的最小路径和。本题可以使用动态规划来解决,动态规划的核心思想是将一个大问题分解为若干个小问题,并保存小问题的解,避免重复计算。可以尝试使用滚动数组来优化空间复杂度,将空间复杂度降低到 O(n)。

南北极之间 797

【Android逆向工程】第18章:Ollvm 混淆与对抗

本章介绍了Ollvm混淆技术及其对抗方法。Ollvm是基于LLVM的开源代码混淆工具,主要实现控制流平坦化、虚假控制流和指令替换三种混淆技术。控制流平坦化通过状态变量和switch-case结构隐藏真实控制流,将原本清晰的逻辑拆分为多个状态块。混淆后的代码在静态分析中难以理解,但可通过动态追踪执行路径、符号执行等方法来还原原始逻辑。本章还提供了混淆代码示例和对抗策略,帮助理解Ollvm的工作原理及其防御方法。

w987333120的博客 213

广东省道路工程检测练习试题(判断题)真题

按下式计算小于某粒径颗粒质量百分数:X=(A/B)x100( )49.、挖坑灌砂法适用于在现场测定基层(或底基层)、砂石路面及路基土的各种材料压实层的密度和压实度,但不适用于填石路堤等有大孔洞或大孔隙材料的压实度检测。95.挖坑灌砂法适用于在现场测定基层(或底基层)、砂石路面及路基土的各种材料压实层的密度和压实度,但不适用于填石路堤等有大孔洞或大孔隙材料的压实度检测( )107.以干密度 pd 为纵坐标,含水率w为横坐标,绘 pd-w 关系曲线,曲线上峰值点的纵、横坐标分别为最大干密度和最佳含水率( )

ZShy001238的博客 684

LeetCode题解:64. 最小路径和,动态规划,JavaScript,详细注释

原题链接:64. 最小路径和 解题思路: 对于位置grid[i][j]而言,只能从上方grid[i - 1][j],以及左方grid[i][j - 1]走到此处。 由于初始状态就是grid的第一行和第一列,因此可以直接复用grid递推。 对应的状态转移方程为:grid[i][j] = Math.min(grid[i - 1][j], grid[i][j - 1]) + grid[i][j];。 /** * @param {number[][]} grid * @return {number} */

Lee Chen的博客 292

Python OpenCV教程从入门到精通的全面指南【文末送书】

全书共分为16章,包括Python与OpenCV、搭建开发环境、图像处理的基本操作、像素的操作、色彩空间与通道、绘制图形和文字、图像的几何变换、图像的阈值处理、图像的运算、模板匹配、滤波器、腐蚀与膨胀、图形检测、视频处理、人脸检测和人脸识别以及MR智能视频打卡系统。主流技术,全面覆盖:本书内容丰富,涵盖了Open CV图像处理技术的方方面面,如图像的几何变换、阈值处理、图像运算、模板匹配、滤波器、腐蚀与膨胀、图形检测、视频处理、人脸检测和人脸识别等。此外,通过对比原图,可更直观地看到图像经过处理后的效果。

一键难忘的博客 9075

64 最小路径和(2021-04-23)

64. 最小路径和 链接:https://leetcode-cn.com/problems/minimum-path-sum/ 题目描述见链接内容。 (1)定义数组元素含义 定义dp[i][j]含的含义为,当机器人从左上角走到[i][j]这个位置时,最小的路径和是dp[i][j],那么dp[m-1][n-1]就是我们要的答案 (2)找出数组元素之间的关系式 机器人达到[i, j]这个位置,有两种选择,向下走或者向右走,所以有两种方式到达 从[i - 1, j]这个位置一步走达 从[i, j - 1]这

多啦的博客 110

树根互联Java开发面试题及参考答案

说一下 Java 集合类。 Java 集合类是用于存储和操作一组对象的容器。它提供了多种数据结构,方便程序员对数据进行高效的管理和处理。 Java 集合框架主要包括两大接口:Collection 和 Map。 Collection 接口是一组对象的集合,它有三个主要的子接口:List、Set 和 Queue。 List 接口代表有序的集合,可以包含重复的元素。例如 ArrayList,它是基于数组实现的动态数组。它的优点是随机访问效率高,通过索引访问元素的时间复杂度为 O (1)。当

大模型大数据攻城狮的专栏 856

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LeetCode-最小路径和

目录????题目要求解题过程 题目要求 原题链接: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 ==

快乐学术猿 795

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

LeetCode64 最小路径和

LeetCode64 最小路径和题目解题解题一:动态规划解题二:回溯法解题三:记忆化搜索 题目 解题 解题一:动态规划 // javascript var minPathSum = function(grid) { const r = grid.length, c = grid[0].length; const dp = new Array(r).fill().map(() => new Array(c).fill()); dp[0][0] = grid[0][0];

433

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

leetcode #64 最小路径和 | 刷题之路第二站——动态规划类问题

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

m0_37714470的博客 305

LeetCode64. 最小路径和

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

码农在途的博客 334

LeetCode64——最小路径的和

题目: 给定一个包含非负整数的 mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小。 思路: 动态规划的思想,记录到达每个格子的最小路径和即可。 代码: class...

Xiao2018428的博客 236

Leetcode 64 最小路径和【动态规划】

本题属于典型的动态规划,以下是解题思路以及Python代码。

Allen_ayt的博客 283

Leetcode—— 64. 最小路径和

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

suxiaorui的博客 606

20190428-Leetcode-64.最小路径和

Leetcode-64.最小路径和 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小。 思路: 动态规划问题,创建一个与grid相同大小的二维数组,然后对应位置中的数值...

WangXu__的博客 193

LeetCode 64. 最小路径和

题目描述 给定一个包含非负整数的mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小。 问题分析 动态规划题。创建一个二维数组,先把dp数组的第一行和第一列创建好,然后...

yj_coder的博客 201

LeetCode64最小路径和

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

小胖的博客 257

leetcode 64 最小路径和

动态规划,从右下角算到左上角。 class Solution { public: int minPathSum(vector<vector<int>>& grid) { int h = grid.size(), w = grid[0].size(); if(h == 0 && w == 0) return ...

sinat_35470625的博客 168
上一篇: JavaScript|LeetCode|动态规划|213.打家劫舍Ⅱ
下一篇: JavaScript|LeetCode|动态规划|62.不同路径
J_learner
博客等级 码龄8年 2粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值