数据结构学习 leetcode64最小路径和

动态规划

题目:

建议看这里,有这道题详细的解析。我觉得写的挺好。

这是我在学动态规划的时候,动手做的一道题。

虽然我在学动态规划,但是我之前学了dps,所以我就想先用dps试着做,结果发现不行,原因是我的中止条件没有弄好,最终如果改成dps+memory,就会和动态规划一样了。

解析:

dp状态:【F(x,y)】走到(x,y)时所用的最小路径和。满足「最优子结构」和「无后效性」。

dp转移方程:分类讨论的思想

  • 如果上边和左边都有,就找上边和左边的min
  • 如果只有上边,那就上边最小路径和+(x,y)的值
  • 如果只有左边,那就左边最小路径和+(x,y)的值
  • 如果上边左边都没有,就保持原来的值(0,0)

复杂度计算:

时间复杂度O(n+m)
空间复杂度O(1)

代码:

这题一写就过了,太好了!

#include <vector>
//解法一:动态规划 
//最小路径和
//时间复杂度O(n+m)
//空间复杂度O(1)
class Solution {
public:
    int minPathSum(std::vector<std::vector<int>>& grid) {
        if (grid.empty() || grid[0].empty())
            return 0;
        row = grid.size();
        col = grid[0].size();
        //状态:grid[i][j]
        for (int i = 0; i < row; ++i)
        {
            for (int j = 0; j < col; ++j)
            {
                //转移方程,分类讨论
                if (i - 1 >= 0 && j - 1 >= 0)//上边和左边都有,就找上边和左边的min
                    grid[i][j] += (grid[i][j - 1] < grid[i - 1][j]) ? grid[i][j - 1] : grid[i - 1][j];
                else if (i - 1 >= 0)//只有上边
                    grid[i][j] += grid[i - 1][j];
                else if (j - 1 >= 0)//只有左边
                    grid[i][j] += grid[i][j - 1];
            }
        }
        return grid[row - 1][col - 1];
    }
private:
    int row;
    int col;
};

void Test_solution2()
{
    //std::vector<std::vector<int>> grid = { {1,3,1},{1,5,1},{4,2,1} };
    //std::vector<std::vector<int>> grid = { {1,2,3},{4,5,6} };
    //std::vector<std::vector<int>> grid = { {1,2,3} };
    //std::vector<std::vector<int>> grid = { {1,3,1},{1,5,1},{4,2,0} };
    //std::vector<std::vector<int>> grid = { {3} };
    std::vector<std::vector<int>> grid = { {} };
    Solution solution;
    std::cout << solution.minPathSum(grid);
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

百川大模型AI对话实战——Python开发一个对话机器人

百川大模型开放提供API体验中心&#xff0c;体验不错&#xff0c;有小伙伴也对搭建自己的对话机器人比较兴趣&#xff0c;今天通过Python来简单介绍下&#xff0c;如何调用百川大模型的API来构建自己的小产品。 在开发环境中安装Python&#xff0c;如何安装&#xff1f;参照网…

全网最细,Jmeter性能测试-入门级接口压测思路,一文打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、压力测试重点关…

Nodejs 第三十章(防盗链)

防盗链&#xff08;Hotlinking&#xff09;是指在网页或其他网络资源中&#xff0c;通过直接链接到其他网站上的图片、视频或其他媒体文件&#xff0c;从而显示在自己的网页上。这种行为通常会给被链接的网站带来额外的带宽消耗和资源浪费&#xff0c;而且可能侵犯了原始网站的…

整数比较1 C语言xdoj93

描述&#xff1a; 编写程序&#xff0c;对于从键盘输入的2个整数&#xff0c;先输出较大者的个位数字&#xff0c;然后输出较小者的平方值。 输入说明&#xff1a; 输入的两个整数之间以一个空格分隔。 输出说明&#xff1a; 在一行上输出两个整数&#xff0c;整数之间以一个空…

将qt程序注册成服务

将qt程序注册成服务 1、qt服务模块管理下载 qt-solutions 2、QtService项目 2.1、将qtservice拷贝到项目代码路径 2.2、实现服务管理 PS&#xff1a;响应服务的启停 CustomService.h #include <QCoreApplication> #include "qtservice.h"class CustomSer…

上市公司-客户、供应商集中度(2000-2022年)

参考《中国工业经济》中吴安兵&#xff08;2023&#xff09;、《上海财经大学学报》中邱保印&#xff08;2023&#xff09;的做法&#xff0c;以客户集中度和供应商集中度之和衡量企业供应链集中度 其中客户集中度以前五名客户产生的营业收入占比衡量&#xff0c;供应商集中度…

好物设计- 实现区域图片变化自动截图

工具–Py即可 重点怎么获取窗口句柄? 使用 spyxx 可以获得句柄 (相当一个窗口的ID,无论窗口怎么变化ID不变我们都可以找到该窗口的详细信息) 替换句柄就可以,也可以不用句柄之间改截图区域 实战图片 import pygetwindow as gw import pyautogui import time import numpy a…

工业交换机之间Profinet无线以太网通信

在实际应用中&#xff0c;车间里控制柜内会有PLC、伺服电机、变频器等设备同时与触摸屏做数据交互&#xff0c;这些设备一般通过工业交换机进行数据组网。总控室内的PC组态软件往往需要采集到&#xff0c;车间内各部分触摸屏、PLC、变频器等设备信号&#xff0c;此时往往是工业…

当代大学生应该如何学习计算机科学

我相信&#xff0c;看到这个标题并且愿意阅读往下阅读的你&#xff0c;一定是正在学习计算机&#xff0c;而自己感到迷茫&#xff0c;或者你还真在考虑要不要学习计算机科学&#xff0c;再或者你是想学计算机而不知道到底该怎么去学的&#xff0c;好&#xff0c;既然你是榜上有…

ssm基于JAVA的校园综合服务系统论文

摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自古…

代码随想录第三十六天(一刷C语言)|背包问题理论基础分割等和子集

创作目的&#xff1a;为了方便自己后续复习重点&#xff0c;以及养成写博客的习惯。 一、背包问题 题目&#xff1a;有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装…

【C#】.net core 6.0 通过依赖注入注册和使用上下文服务

给自己一个目标&#xff0c;然后坚持一段时间&#xff0c;总会有收获和感悟&#xff01; 请求上下文是指在 Web 应用程序中处理请求时&#xff0c;包含有关当前请求的各种信息的对象。这些信息包括请求的头部、身体、查询字符串、路由数据、用户身份验证信息以及其他与请求相关…

Android 自动适配屏幕方案—— smallestWidth

smallestWidth限定符适配原理和屏幕分辨率限定符适配一样&#xff0c;都是通过创建多个values文件夹&#xff0c;系统根据限定符去寻找对应的dimens.xml文件&#xff0c;以确定不同设备上的大小展示&#xff0c;smallestWidth 限定符适配是拿 dp 值来等比缩放. 如何使用 一、…

低代码和纯代码:双向奔赴,共创未来ing……

低代码开发是近年来迅速崛起的软件开发方法&#xff0c;让编写应用程序变得更快、更简单。有人说它是美味的膳食&#xff0c;让开发过程高效而满足&#xff0c;但也有人质疑它是垃圾食品&#xff0c;缺乏定制性与深度。你认为低代码到底是美味的膳食还是垃圾食品呢&#xff0c;…

如何快速优化大数据量订单表

场景 本篇分享以前在广州一家互联网公司工作时遇到的状况及解决方案,这家公司有一个项目是SOA的架构,这个架构那几年是很流行的,哪怕是现在依然认为这个理念在当时比较先进。 当时的项目背景大概是这样,这家公司用的是某软提供的方案,项目已经运行3年多,整体稳定。 数据…

轴具匠心 SIA上海轴承展带您开启轴承之旅

轴承是各类机械装备的重要基础零部件&#xff0c;它的精度、性能、寿命和可靠性对主机的工作效率、使用寿命起着决定性的作用。随着市场的发展&#xff0c;用户对轴承产品的精度、性能、种类等方面的要求越来越高&#xff0c;市场对高档轴承的需求也在不断增加。 由中国设备管理…

Android中EventBus的简单使用

目录 介绍 EventBus产生的背景 EventBus工作流程图解 EventBus的优势 EventBus缺点 EventBus 的一些关键概念和用法&#xff1a; 使用 EventBus 的基本流程&#xff1a; EventBus环境配置 EventBus的五种线程模式 EventBus的使用 EventBus事件三部曲 创建一个事件类…

SE-Net:Squeeze-and-Excitation Networks(CVPR2018)

文章目录 AbstractIntroduction表征的重要性以前的方向本文提出 Related WorkDeeper ArchitectureAlgorithmic Architecture SearchAttention and gating mechanisms Squeeze-and-Excitation BlocksSqueeze: Global Information EmbeddingExcitation: Adaptive RecalibrationIn…

ssm基于vue的厨房管理系统论文

摘 要 使用旧方法对厨房管理信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在厨房管理信息的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。 这次开发的厨房管理系统管…

【Python-批量修改视频分辨率】

Python-批量修改视频分辨率 1 使用Python修改视频分辨率2 常见的视频编码格式2.1 等效的编码格式表示方式2.2 常见的编码格式 1 使用Python修改视频分辨率 首先拷贝视频文件并修改后缀&#xff0c;然后修改图片的分辨率&#xff0c;实现视频批量修改和转换。 import os impor…