算法leetcode|64. 最小路径和(rust重拳出击)

news2024/10/7 8:23:52

文章目录

  • 64. 最小路径和:
    • 样例 1:
    • 样例 2:
    • 提示:
  • 分析:
  • 题解:
    • rust:
    • go:
    • c++:
    • python:
    • java:


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

分析:

  • 面对这道算法题目,二当家的再次陷入了沉思。
  • 这道题和62. 不同路径和63. 不同路径 II 有些类似,但是这次是寻找最优解,由于每个位置的数值不一定是多少,所以同样没法使用数学公式直接计算。
  • 那么动态规划又成了此时的优选。
  • 从左上角出发,网格的第一行的每个元素只能从左上角元素开始向右移动到达,网格的第一列的每个元素只能从左上角元素开始向下移动到达,此时的路径是唯一的,因此每个元素对应的最小路径和即为对应的路径上的数字总和。
  • 其他的点只能从上或者从左到达,所以一个点的最优路径,一定经过上面或者左面。从上到下,从左到右开始动态规划,分解成了子问题。到达当前点的最短路径和,就是上面和左面点的最小路径和中的较小值加上当前点的值。
  • 这里一样可以使用滚动数组优化空间。

题解:

rust:

impl Solution {
    pub fn min_path_sum(grid: Vec<Vec<i32>>) -> i32 {
        let (rows, cols) = (grid.len(), grid[0].len());
        let mut dp = vec![0; cols];
        dp[0] = grid[0][0];
        (1..cols).for_each(|c| {
            dp[c] = dp[c - 1] + grid[0][c];
        });
        (1..rows).for_each(|r| {
            dp[0] += grid[r][0];
            (1..cols).for_each(|c| {
                dp[c] = dp[c].min(dp[c - 1]) + grid[r][c];
            });
        });
        return dp[cols - 1];
    }
}

go:

func minPathSum(grid [][]int) int {
    rows, cols := len(grid), len(grid[0])
	dp := make([]int, cols)
	dp[0] = grid[0][0]
	for c := 1; c < cols; c++ {
		dp[c] = dp[c-1] + grid[0][c]
	}
	for r := 1; r < rows; r++ {
		dp[0] += grid[r][0]
		for c := 1; c < cols; c++ {
			if dp[c-1] < dp[c] {
				dp[c] = dp[c-1] + grid[r][c]
			} else {
				dp[c] += grid[r][c]
			}

		}
	}
	return dp[cols-1]
}

c++:

class Solution {
public:
    int minPathSum(vector<vector<int>>& grid) {
        const int rows = grid.size(), cols = grid[0].size();
        int dp[cols];
        dp[0] = grid[0][0];
        for (int c = 1; c < cols; ++c) {
            dp[c] = dp[c - 1] + grid[0][c];
        }
        for (int r = 1; r < rows; ++r) {
            dp[0] += grid[r][0];
            for (int c = 1; c < cols; ++c) {
                dp[c] = min(dp[c], dp[c - 1]) + grid[r][c];
            }
        }
        return dp[cols - 1];
    }
};

python:

class Solution:
    def minPathSum(self, grid: List[List[int]]) -> int:
        rows, cols = len(grid), len(grid[0])
        dp = [0] * cols
        for c in range(cols):
            dp[c] = dp[c - 1] + grid[0][c]
        for r in range(1, rows):
            dp[0] += grid[r][0]
            for c in range(1, cols):
                dp[c] = min(dp[c], dp[c - 1]) + grid[r][c]
        return dp[cols - 1]


java:

class Solution {
    public int minPathSum(int[][] grid) {
        final int   rows = grid.length, cols = grid[0].length;
        final int[] dp   = new int[cols];
        dp[0] = grid[0][0];
        for (int c = 1; c < cols; ++c) {
            dp[c] = dp[c - 1] + grid[0][c];
        }
        for (int r = 1; r < rows; ++r) {
            dp[0] += grid[r][0];
            for (int c = 1; c < cols; ++c) {
                dp[c] = Math.min(dp[c], dp[c - 1]) + grid[r][c];
            }
        }
        return dp[cols - 1];
    }
}

非常感谢你阅读本文~
欢迎【点赞】【收藏】【评论】三连走一波~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~


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

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

相关文章

32 QFile文件读写

案例&#xff1a;使用LineEdit和TextEdit实现读取文件并显示文件内容 展示&#xff1a; 代码&#xff1a; #include "widget.h" #include "ui_widget.h" #include "QFileDialog" #include "QMessageBox" #include "QFile" …

2、nacos 2.1.0注册中心原理及源码分析

一、为什么有这课程 Spring Cloud Alibaba 新版本中Seata 1.5.2和Nacos 2.1.0 在性能和使用方面都有很大提升&#xff0c;这节课将从使用和源码的角度详细讲解这两个框架。 二、设计注册中心 1、分布式框架的注意点&#xff1a;三高架构 高可用 高可用性&#xff08;High Av…

智慧园区智能照明控制系统解决方案

1、概述 园区照明比较复杂&#xff0c;办公建筑、生产车间和园区道路、景观照明等类型比较多&#xff0c;而且对照明控制方式要求不一样。所以合理使用照明控制系统&#xff0c;针对不同建筑不同场景使用不同的控制策略&#xff0c;大程度使用自然光照明达到节省照明用电&#…

科技资讯|苹果开放Vision Pro头显开发套件申请,此前曝光三款电池

苹果今天宣布面向开发人员&#xff0c;正式接受 Vision Pro 头显开发套件申请&#xff0c;从而帮助其开发和测试应用程序。 苹果官方页面介绍&#xff0c;开发人员在获得 Vision Pro 头显开发套件之外&#xff0c;还可以获得设备设置和入门方面的帮助&#xff0c;与 Apple 专…

谷粒商城篇章5 ---- P173-P192 ---- 检索服务【分布式高级篇二】

目录 1 检索服务 1.1 搭建页面环境 1.1.1 引入依赖 1.1.2 将检索页面放到gulimall-search的src/main/resources/templates/目录下 1.1.3 调整搜索页面 1.1.4 将静态资源放到linux的nginx相关映射目录下/root/docker/nginx/html/static/ search/ 1.1.5 SwitchHosts配置域…

F5产品队列再添“猛将”,稳健守护云原生基础设施

提到F5产品队列&#xff0c;无论是负载均衡&#xff0c;还是独立部署且一次性购买的硬件产品&#xff0c;或者是F5 分布式云服务组合产品&#xff0c;都体现出F5的能力与能量。前不久&#xff0c;F5宣布推出云工作负载防护解决方案——F5 分布式云应用基础设施防护&#xff08;…

Python基础语法第六章之字典

一、字典 1.1字典是什么 字典是一种存储 键值对 的结构. 啥是键值对? 这是计算机/生活中一个非常广泛使用的概念. 把 键(key) 和 值(value) 进行一个一对一的映射, 然后就可以根据键, 快速找到值. 1.2创建字典 创建一个空的字典. 使用 { } 表示字典. a { } b dict() pr…

Win10从安全模式命令行退出安全模式正常启动

前两天听信他人的一则妖言&#xff0c;将windows设置为安全模式卸载软件&#xff0c;结果初始帐户密码忘记&#xff0c;登陆不了了&#xff0c;琢磨半天才正常启动用pin登录了系统。 微软可以使用本地帐户或在线帐户管理计算机&#xff0c;在线帐户的好处就是可以云同步密钥 设…

uniapp 微信小程序 预览pdf方法

效果图&#xff1a; 1、在小程序中 // #ifdef MP */ 是区分运行的环境&#xff0c;在小程序中可使用如下方法uni.downloadFile({url: item.link,//文件地址success: function (res) {var filePath res.tempFilePath;uni.openDocument({filePath: filePath,showMenu: false…

Hadoop学习日记-MapReduce思想及执行流程

MapReduce思想 Map负责“拆分”&#xff1a;即将复杂问题拆分成可以并行计算的小问题&#xff0c;彼此之间几乎没有依赖联系。 Reduce负责对Map阶段的结果进行合并汇总 Map和Reduce的抽象接口如下&#xff1a; map:(k1; v1) — (k2; v2) reduce:(k2; [v2]) — (k3; v3) 一…

行为型模式 - 解释器模式

概述 如上图&#xff0c;设计一个软件用来进行加减计算。我们第一想法就是使用工具类&#xff0c;提供对应的加法和减法的工具方法。 //用于两个整数相加 public static int add(int a,int b){return a b; }//用于两个整数相加 public static int add(int a,int b,int c){r…

玩转代码|JS实现中文字符串对utf-8的Base64编码的方法

目录 UTF-8 字符串编解码 解决方法 解析 utf8_to_b64 b64_to_utf8 弃用 unescape 和 escape 方法 原由 解决方法 Node.js 下的 Base64 编解码 Base64 编解码 Base64是一种使用64基的位置计数法。它使用2的最大次方来代表仅可打印的ASCII 字符。这使它可用来作为电子邮…

YOLOv2论文对比总结

1、高分辨率图片效果提升 2、Anchor 3、Loss函数 4、小目标友好

【文献分享】比目前最先进的模型轻30%!高效多机器人SLAM蒸馏描述符!

论文题目&#xff1a;Descriptor Distillation for Efficient Multi-Robot SLAM 中文题目&#xff1a;高效多机器人SLAM蒸馏描述符 作者&#xff1a;Xiyue Guo, Junjie Hu, Hujun Bao and Guofeng Zhang 作者机构&#xff1a;浙江大学CAD&CG国家重点实验室 香港中文大学…

Windows安装Redis(配置开机自启+配置密码)

Windows安装Redis 背景安装配置开机自启补充: 在Windows中配置jar自启动 设置密码暂时永久(推荐) 背景 Redis以其优异的性能备受青睐. 成为开发人员离不开的软件一直, 相信愿意点开观看此文的人DDDD 最近因为需要在Windows服务器上面搭建各种项目运行环境, 其中就包括Redis 因…

vue 实现课程表甘特图

1 封装 components <template><view style"padding-bottom: 100rpx;"><view class"header flex_sb"><div class"header_list flex" v-for"(item,index) in timeList" :key"item.value"><div&g…

CORS跨域资源共享漏洞

前置知识 跨域 域&#xff08;Domain&#xff09;是由三部分组成的标识&#xff1a;协议、域名和端口。 例如这两个ip就属于不同的域&#xff1a; http://example.com https://example.com 因为它们的协议不同&#xff08;一个是HTTP&#xff0c;另一个是HTTPS&#xff0…

2023百强县名单出炉!千亿县达54个

作为国民经济发展中的基本单元&#xff0c;县域经济发挥着重要作用。 赛迪顾问25日发布的《2023中国县域经济百强研究》&#xff08;下称“报告”&#xff09;显示&#xff0c;千亿县达54个&#xff0c;百强县前10名中江苏省独占6席。 在百强县前10名中&#xff0c;江苏省占席最…

Esp32_Arduino接入腾讯云笔记

ESP32是一款由乐鑫科技&#xff08;Espressif Systems&#xff09;推出的双核、低功耗、集成Wi-Fi和蓝牙的单芯片微控制器。它采用了Tensilica Xtensa LX6高性能处理器&#xff0c;具有大量的GPIO引脚、模数转换器、SPI、I2S、UART、PWM、I2C和SD卡接口等功能&#xff0c;可以满…

android 清除缓存方法

获得应用的存储信息 private void getAppStorageInfo(String packageName){StorageStatsManager storageStatsManager (StorageStatsManager) context.getSystemService(Context.STORAGE_STATS_SERVICE);StorageManager storageManager (StorageManager) context.getSystemS…