代码随想录 day 34 动态规划

news2025/1/10 2:20:07

第九章 动态规划part02

今天开始逐渐有 dp的感觉了,前 两题 不同路径,可以好好研究一下,适合进阶
详细布置

62.不同路径

本题大家掌握动态规划的方法就可以。 数论方法 有点非主流,很难想到。
https://programmercarl.com/0062.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84.html
视频讲解:https://www.bilibili.com/video/BV1ve4y1x7Eu

63. 不同路径 II

https://programmercarl.com/0063.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84II.htmlhttps://programmercarl.com/0063.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84II.html
视频讲解:https://www.bilibili.com/video/BV1Ld4y1k7c6

343. 整数拆分 (可跳过)

本题思路并不容易想,一刷建议可以跳过。如果学有余力,可以看视频理解一波。
https://programmercarl.com/0343.%E6%95%B4%E6%95%B0%E6%8B%86%E5%88%86.html
视频讲解:https://www.bilibili.com/video/BV1Mg411q7YJ

96. .不同的二叉搜索树 (可跳过)

本题思路并不容易想,一刷建议可以跳过。 如果学有余力,可以看视频理解一波。
https://programmercarl.com/0096.%E4%B8%8D%E5%90%8C%E7%9A%84%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91.html
视频讲解:https://www.bilibili.com/video/BV1eK411o7QA

62. 不同路径

题目链接

https://leetcode.cn/problems/unique-paths/description/

解题思路

1.确定dp数组以及下标i的含义
** dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径**
** 2.确定递推公式**
** 想要求dp[i][j],只能有两个方向来推导出来,即dp[i - 1][j] 和 dp[i][j - 1]**
** dp[i][j]=dp[i][j-1]+dp[i-1][j];**
** 3.dp数组的初始化**
** 首先dp[i][0]一定都是1,因为从(0, 0)的位置到(i, 0)的路径只有一条,那么dp[0][j]也同理**
4.确定遍历顺序
5.举例推导dp数组

code

class Solution {
    //时间复杂度:O(m × n) 空间复杂度O(m x n)
    public int uniquePaths(int m, int n) {
        //1.确定dp数组以及下标i的含义
        //dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径
        //2.确定递推公式
        //想要求dp[i][j],只能有两个方向来推导出来,即dp[i - 1][j] 和 dp[i][j - 1]
        //dp[i][j]=dp[i][j-1]+dp[i-1][j];
        //3.dp数组的初始化
        //首先dp[i][0]一定都是1,因为从(0, 0)的位置到(i, 0)的路径只有一条,那么dp[0][j]也同理
        int[][] dp=new int[m][n];
        for(int i=0;i<n;i++){
            dp[0][i]=1;
        }
        for(int j=0;j<m;j++){
            dp[j][0]=1;
        }
        //4.确定遍历顺序
        for(int i=1;i<m;i++){
            for(int j=1;j<n;j++){
                dp[i][j]=dp[i][j-1]+dp[i-1][j];
                //System.out.println("i:"+i+",j:"+j+",res:"+dp[i][j]);
            }
        }
        //5.举例推导dp数组
         return dp[m-1][n-1];
    }
   
}

来分析一下时间复杂度,这个深搜的算法,其实就是要遍历整个二叉树。
这棵树的深度其实就是m+n-1(深度按从1开始计算)。
那二叉树的节点个数就是 2^(m + n - 1) - 1。可以理解深搜的算法就是遍历了整个满二叉树(其实没有遍历整个满二叉树,只是近似而已)
所以上面深搜代码的时间复杂度为O(2^(m + n - 1) - 1),可以看出,这是指数级别的时间复杂度,是非常大的。

class Solution {
   
    public int uniquePaths(int m, int n) {
        return dfs(m-1,n-1,m,n);
    }

    public int dfs(int i,int j,int m,int n){
        if(i<0 ||j <0){
            return 0;
        }
        //找到了一种路径
        if(i==0||j==0){
            return 1;
        }
        return dfs(i-1,j,m,n)+dfs(i,j-1,m,n);
    }
   
}

树递归的时间复杂度分析

这俩道题递归写法分析时间复杂度时是O(2n)和O(2(m + n - 1) - 1),斐波那契数 树深度是n,和最短路径 树深度是m+n-1 ,这个树深度是怎么理解得出的,有什么技巧嘛? 每次想不到,只能靠自己举例数下确实对上了,感觉没有理解到位。
:::tips
理解递归的时间复杂度O(n) O(logn):https://programmercarl.com/%E5%89%8D%E5%BA%8F/%E9%80%9A%E8%BF%87%E4%B8%80%E9%81%93%E9%9D%A2%E8%AF%95%E9%A2%98%E7%9B%AE%EF%BC%8C%E8%AE%B2%E4%B8%80%E8%AE%B2%E9%80%92%E5%BD%92%E7%AE%97%E6%B3%95%E7%9A%84%E6%97%B6%E9%97%B4%E5%A4%8D%E6%9D%82%E5%BA%A6%EF%BC%81.html

理解树深度:
深度优先遍历(Depth First Search, 简称_DFS) 与广度优先遍历(Breath First Search)是图论中两种非常重要的算法_
树深度理解的话,每一步可选的动作方向可以看成一个树的分支,而具体的走一步是一个树的节点。在不同路径里,很显然的一条路径是直接右走再下走,这对应于树中的一个根到叶子的路径,这条路径的深度是 m+n-1。在所有的深搜中,也大致都可以这样类比,每一步搜索时可选的值是分支,每个选择是一个节点,一个能够到达递归终止条件的选择集合就是一条路径
:::

63. 不同路径 II

题目链接

https://leetcode.cn/problems/unique-paths-ii/description/

解题思路

跟上题差不都,就是多了些条件判断。
递推公式:
dp[i][j]=obstacleGrid[i][j]==1?0:(obstacleGrid[i-1][j]==1?0:dp[i-1][j])+(obstacleGrid[i][j-1]==1?0:dp[i][j-1]);
初始化要注意,遇到一个障碍物 后面都初始化为0

code

class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int m=obstacleGrid.length;
        int n=obstacleGrid[0].length;
        int[][] dp=new int[m][n];
        boolean falgm=false;
        boolean falgn=false;
        for(int i=0;i<m;i++){
            if(falgm || obstacleGrid[i][0]==1){
                dp[i][0]=0;
                falgm=true;
            }else{
                 dp[i][0]=1;
            }
           
        }
        for(int j=0;j<n;j++){
            if(falgn || obstacleGrid[0][j]==1){
                dp[0][j]=0;
                falgn=true;
            }else{
                dp[0][j]=1;
            }
            
        }
        for(int i=1;i<m;i++){
            for(int j=1;j<n;j++){
                dp[i][j]=obstacleGrid[i][j]==1?0:(obstacleGrid[i-1][j]==1?0:dp[i-1][j])+(obstacleGrid[i][j-1]==1?0:dp[i][j-1]);
                //System.out.println(dp[i][j]);
            }
        }
        return dp[m-1][n-1];
    }
}

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

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

相关文章

RocketMQ5.0 Consumer Group

消费者分组的概念 消费者分组&#xff08;Consumer Group&#xff09;是指一组消费同一类消息的消费者实例。每个消费者分组有一个唯一的名称&#xff0c;用于标识该分组。消费者分组的设计使得消息能够被多个消费者实例并行消费&#xff0c;同时确保每条消息只被一个消费者实…

吴恩达机器学习笔记

1.机器学习定义&#xff1a; 机器学习就是让机器从大量的数据集中学习&#xff0c;进而得到一个更加符合现实规律的模型&#xff0c;通过对模型的使用使得机器比以往表现的更好 2.监督学习&#xff1a; 从给定的训练数据集中学习出一个函数&#xff08;模型参数&#xff09;…

LLM(大语言模型)「Agent」开发教程-LangChain(三)

v1.0官方文档&#xff5c;最新文档 一、LangChain入门开发教程&#xff1a;Model I/O 二、基于LangChain的RAG开发教程 LangChain是一个能够利用大语言模型&#xff08;LLM&#xff0c;Large Language Model&#xff09;能力进行快速应用开发的框架&#xff1a; 高度抽象的组件…

分享一个基于微信小程序的流浪动物救助领养平台springboot(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

C++基础编程100题-035 OpenJudge-1.4-16 三角形判断

更多资源请关注纽扣编程微信公众号 http://noi.openjudge.cn/ch0104/16/ 描述 给定三个正整数&#xff0c;分别表示三条线段的长度&#xff0c;判断这三条线段能否构成一个三角形。 输入 输入共一行&#xff0c;包含三个正整数&#xff0c;分别表示三条线段的长度&#x…

数据资产:发展现状与未来展望

数据资产&#xff1a;发展现状与未来展望 数据资产作为当今数字经济发展的关键要素&#xff0c;正发挥着日益重要的作用。数据资产是被合法拥有或控制的&#xff0c;能进行计量的&#xff0c;为组织带来经济和社会价值的数据资源。它经历了从数据到数据资产的市场化过程&#x…

一文带你玩转全新采集配置 CRD:AliyunPipelineConfig

作者&#xff1a;玄飏 既然是一文玩转&#xff0c;自然要讲些背景 1.1. 什么是 iLogtail 采集配置 长话短说&#xff1a; SLS&#xff1a;阿里云日志服务&#xff0c;一站式提供数据采集、加工、查询与分析、可视化、告警、消费与投递等功能&#xff0c;全面提升您在研发、…

atsec增加Swift CSP评估资质

atsec信息安全评估员现已被Swift列为Swift客户安全计划&#xff08;CSP&#xff1a;Customer Security Programme&#xff09;认证评估员目录中的评估提供商&#xff0c;可以帮助全球金融机构评估其针对CSP强制性和咨询性控制的合规级别。在金融行业&#xff0c;Swift要求使用其…

NVIDIA Triton系列03-开发资源说明

NVIDIA Triton系列03-开发资源说明 大部分要学习 Triton 推理服务器的入门者&#xff0c;都会被搜索引擎或网上文章引导至官方的 https://developer.nvidia.com/nvidia-triton-inference-server 处&#xff08;如下截图&#xff09;&#xff0c;然后从 “Get Started” 直接安…

基础岛-任务1:书生大模型全链路开源开放体系

视频地址: https://www.bilibili.com/video/BV18142187g5/ 书生大模型全链路开源开放体系–笔记 技术发展 inerLM2.5 支持100wtoken核心技术思路 数据合成 1.基于规则的构造代码 公式&#xff0c;函数&#xff0c;数学题解2.基于模型的数据扩充代码加注释3.基于人类反馈的数…

从ssm框架 到 spring框架 再到 springmvc框架 设计思想

一、在使用ssm框架的时候&#xff0c;从前端发送get请求到后端处理数据的完整流程是&#xff1a; WebServlet(name "getAll", value "/getAll") public class AddServelet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest reque…

FPGA知识基础之RAM--基于IP核的单端口RAM设计

目录 一、RAM简介1.1 基本特性1.2 RAM对电脑性能的影响1.3 RAM的应用场景 二、存储器的分类1.存储器分类2.RAM分类 三、实验任务四、程序设计1.系统模块2.波形绘制3.IP核设置4.代码编写RTL代码Testbench代码 五、仿真 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案…

WebRTC 初探

前言 项目中有局域网投屏与文件传输的需求&#xff0c;所以研究了一下 webRTC&#xff0c;这里记录一下学习过程。 WebRTC 基本流程以及概念 下面以 1 对 1 音视频实时通话案例介绍 WebRTC 的基本流程以及概念 WebRTC 中的角色 WebRTC 终端,负责音视频采集、编解码、NAT 穿…

【书生大模型实战营第三期】基础岛 第2关 8G 显存玩转书生大模型 Demo

欢迎大家参与第三期书生大模型实战营&#xff01;&#xff01;&#xff01; 1. 基础任务 任务描述&#xff1a;使用 Cli Demo 完成 InternLM2-Chat-1.8B 模型的部署&#xff0c;并生成 300 字小故事&#xff0c;记录复现过程并截图。 1. 首先创建开发机&#xff0c;并建立远程链…

操作系统03:调度算法和文件系统

文章目录 调度算法进程调度算法先来先服务调度算法最短作业优先调度算法高响应比优先调度算法时间片轮转调度算法最高优先级调度算法 内存页面置换算法最佳页面置换算法&#xff08;OPT&#xff09;先进先出置换算法&#xff08;FIFO&#xff09;最近最久未使用的置换算法&…

电赛必备-TI开发板MSPM0G3507开发应用教程-环境配置

这篇文章将手把手详细介绍如何安装及环境配置对MSPM0G3507进行开发 这个网址是TI德州仪器的官网&#xff1a; 模拟 | 嵌入式处理 | 半导体公司 | 德州仪器 TI.com.cn 这个网址直接复制&#xff0c;进入即可跳转我们需要的内容页面https://www.ti.com.cn/tool/cn/LP-MSPM0G350…

LLaMA- Adapter V2: Parameter-Efficient Visual Instruction Model

发表时间&#xff1a;28 Apr 2023 论文链接&#xff1a;https://arxiv.org/pdf/2304.15010 作者单位&#xff1a; Shanghai Artificial Intelligence Laboratory Motivation&#xff1a;如何有效地将大型语言模型 (LLM) 转换为指令追随者最近是一个流行的研究方向&#xff0…

MyBatisPlus简介及入门案例

MyBatisPlus简介 MyBatis-Plus&#xff08;简称 MP&#xff09;是一个 MyBatis的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 特性 无侵入&#xff1a;只做增强不做改变&#xff0c;引入它不会对现有工程产生影响&…

【知识跨境电商API接口丨python数分实战】国际电商平台用户成交转化分析

今天这篇文章将给大家介绍国际电商平台用户成交转化分析案例。 01 初步思路 问题已经明确 GMV的下降&#xff0c;可能出在用户下单成交环节。 这里需要明确GMV下降是今年与去年相比吗&#xff1f;明确GMV下降到底如何判断出来的&#xff1f;对比的对象是什么&#xff1f;如…

2024免费文案生成器,一键生成原创文案

在自媒体时代的今天&#xff0c;文案创作需求日益增长&#xff0c;无论是营销推广、社交媒体运营&#xff0c;还是品牌宣传、内容创作&#xff0c;优质的文案都起着至关重要的作用。对于文案创作者来说&#xff0c;如何在有限的时间内创作出吸引人、有价值且独特的文案&#xf…