代码随想录刷题记录day34 动态规划理论基础+斐波那契数+爬楼梯+使用最小花费爬楼梯

news2024/9/27 23:23:57

代码随想录刷题记录day34 动态规划理论基础+斐波那契数+爬楼梯+使用最小花费爬楼梯

动态规划理论基础

解决的问题

由前一个状态决定了后一个的状态,可以用动态规划来解决。贪心是没有状态推导的。

解题步骤

  1. 确定dp数组(dp table)以及下标的含义
  2. 确定递推公式
  3. dp数组如何初始化
  4. 确定遍历顺序
  5. 举例推导dp数组

打印dp数组来验证

509. 斐波那契数

在这里插入图片描述

思想

当前的状态是由之前的状态推导出来的,所以可以用动态规划来解决此类问题。

动态规划五步曲

  1. 确定dp数组(dp table)以及下标的含义

    dp[i]表示第i个斐波那契数

  2. 确定递推公式

    题目给了递推公式了dp[i]=dp[i-1]+dp[i-2]

  3. dp数组如何初始化

    题目已经给了初始数值 dp[0]=0,dp[1]=1

  4. 确定遍历顺序

    当前状态是依赖之前的状态的,所以是从前往后遍历的

  5. 举例推导dp数组

    0 1 1 2 3 5 8 13 21 34 55

代码

class Solution {
    // public int fib(int n) {
    //     int f0=0,f1=1;
    //     if(n==0) return 0;
    //     if(n==1) return 1;
    //     int sum=0;
    //     for(int i=2;i<=n;i++){
    //         sum=f1+f0;
    //         f0=f1;
    //         f1=sum;
    //     }

    //     return sum;
    // }

    public int fib(int n){
        //动态规划五步曲
        //1/确定dp数组(dp table)以及下标的含义  dp[i]表示 第i个斐波那契数
        //2.确定递推公式 dp[i]=dp[i-1]+dp[i-2]
        //3.dp数组如何初始化 dp[0]=0;dp[1]=1
        //4.确定遍历顺序 前面的状态推出后面的状态 所以是从前往后遍历
        //5.举例推导dp数组  dp[2]=dp[1]+dp[0];

        int [] dp=new int[n+1];
        if(n==0) return 0;
        if(n==1) return 1;
        dp[0]=0;
        dp[1]=1;
        for(int i=2;i<=n;i++){
            dp[i]=dp[i-1]+dp[i-2];
        }

        return dp[n];

    }
}

70. 爬楼梯

在这里插入图片描述

思想

动态规划五步曲

  1. 确定dp数组(dp table)以及下标的含义

    dp[i]表示到达第i个台阶的方法

  2. 确定递推公式

    dp[i-1]表示到达第i-1个台阶的方法

    dp[i-2]表示到达第i-2个台阶的方法

    dp[i]只能从i-1个台阶和i-2个台阶跳过来,所以dp[i]=dp[i-1]+dp[i-2];

  3. dp数组如何初始化

    n从1开始

    dp[1]=1;

    dp[2]=2;

  4. 确定遍历顺序

    当前状态是依赖之前的状态的,所以是从前往后遍历的

  5. 举例推导dp数组

    1 2 3 5 8

代码

class Solution {
    public int climbStairs(int n) {
        //动态规划 五步曲
        //1.确定 dp[i] 和下标
        //2.动态规划方程
        //3.初始化
        //4..遍历顺序
        //5.举例推导

        //dp[i] 表示跳到第i个台阶的方法数
        //dp[i]=dp[i-1]+dp[i-2];
        //dp[1]跳到第一个台阶,有一种  跳到第二个台阶有2种
        if(n==1) return 1;
        int [] dp=new int[n+1];
        dp[1]=1;
        dp[2]=2;
        //当前台阶需要之前台阶的状态
        for(int i=3;i<=n;i++){
            dp[i]=dp[i-1]+dp[i-2];
            //System.out.println(dp[i]);
        }

        return dp[n];
    }
}

746. 使用最小花费爬楼梯

在这里插入图片描述

思想

动态规划五步曲

  1. 确定dp数组(dp table)以及下标的含义

    dp[i]表示到达第i个台阶所需的最小的花费

  2. 确定递推公式

    dp[i-1]表示到达第i-1个台阶所需的最小的花费

    dp[i-2]表示到达第i-2个台阶所需的最小的花费

    dp[i]只能从i-1个台阶和i-2个台阶跳过来,所以dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);

  3. dp数组如何初始化

    从第0个台阶或者第1个台阶开始跳,dp[0]=0,dp[1]=0;

  4. 确定遍历顺序

    当前状态是依赖之前的状态的,所以是从前往后遍历的

  5. 举例推导dp数组

    cost=[1,100,1,1,1,100,1,1,100,1]

    dp[i]=[0,0,1,2,2,3,3,4,4,5,6]

代码

class Solution {
    public int minCostClimbingStairs(int[] cost) {
        //递归五部曲
        //1.确定dp数组含义 及下标的含义
        //2.确定递推公式
        //3.初始化
        //4.遍历顺序
        //5.模拟过程

        //cost[i] 从楼梯第i个台阶向上爬需要支付的费用
        //dp[i] 爬到第i个台阶 所需要的最小的费用
        //dp[i-1]爬到第i-1个台阶 所需要的最小的费用
        //dp[i-2]爬到第i-2个台阶 所需要的最小的费用
        //dp[2]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);


        int[] dp=new int[cost.length+1];
        dp[0]=0;
        dp[1]=0;

        for(int i=2;i<=cost.length;i++){
            dp[i]=Math.min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
            //System.out.println(dp[i]);
        }

        return dp[cost.length];

    }
}

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

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

相关文章

一键集成 SQL 审核到你的 GitLab 和 GitHub CI/CD

本文以 GitLab 为例&#xff0c;GitHub 方式类似。 操作步骤 事先准备 开启 Bytebase 团队版&#xff08;从 v1.8.0 开始&#xff0c;你可以直接开启 14 天的团队版免费试用&#xff09;。 为你的 Bytebase workspace 和项目开启 VCS 工作流&#xff1a;https://www.bytebas…

基于钉钉通讯录,同步构建本地LDAP服务

上一篇《利用飞书通讯录同步搭建本地LDAP》方案发出后&#xff0c;引起不少企业 IT 人员共鸣。本次&#xff0c;宁盾针对使用了钉钉社交应用的企业推出基于钉钉通讯录&#xff08;组织架构和用户信息&#xff09;同步搭建本地 LDAP的方案。 钉钉已经成为很多企业日常处理工作的…

基于FPGA的智能小车系统

目 录 前 言 1 第1章 系统总体方案设计 4 1.1 系统任务描述 4 1.2 控制系统要求 4 1.3 方案设计与论证 4 1.3.1 小车载体选择 4 1.3.2 主控制器选择 5 1.3.3 传感器选择 5 1.3.4 电机驱动选择 6 1.3.5 稳压电源选择 7 1.3.6 智能小车系统最终方案 7 1.4 系统总体设计 8 1.4.…

【Java开发】 Spring 07 :Spring AOP 实践详解(通过 AOP 打印数据访问层)

AOP 指是面向切面编程&#xff08;通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术&#xff09;&#xff0c;利用AOP可以对业务逻辑的各个部分进行隔离&#xff0c;从而使得业务逻辑各部分之间的耦合度降低&#xff0c;提高程序的可重用性&#xff0c;同时提…

SpringBoot 3.0 新特性,内置声明式 HTTP 客户端

http interface 从 Spring 6 和 Spring Boot 3 开始&#xff0c;Spring 框架支持将远程 HTTP 服务代理成带有特定注解的 Java http interface。类似的库&#xff0c;如 OpenFeign 和 Retrofit 仍然可以使用&#xff0c;但 http interface 为 Spring 框架添加内置支持。 什么是…

RabbitMQ之集群方案原理

对于无状态应用&#xff08;如普通的微服务&#xff09;很容易实现负载均衡、高可用集群。而对于有状态的系统&#xff08;如数据库等&#xff09;就比较复杂。 1、业界实践 主备模式&#xff1a;单活&#xff0c;容量对等&#xff0c;可以实现故障转移。使用独立存储时需要借…

【Matplotlib绘制图像大全】(二十五):Matplotlib使用figure()添加画布

前言 大家好,我是阿光。 本专栏整理了《Matplotlib绘制图像大全》,内包含了各种常见的绘图方法,以及Matplotlib各种内置函数的使用方法,帮助我们快速便捷的绘制出数据图像。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmMatp…

2022re:Invent:亚马逊云科技拥有超过15年的数据创新经验

在探索适合企业的数据战略的道路上&#xff0c;企业并不孤单。亚马逊云科技有着超过15年的数据领域创新经验。并一直在尝试通过创新的方法去改进数据存储和分析的过程&#xff1a;亚马逊云科技在云中提供了第一个可扩展存储服务S3、发布了云上第一个专门构建的数据库DynamoDB和…

easyrecovery2023免费版电脑数据恢复软件下载功能介绍

误删了重要文件&#xff1f;电脑中毒数据丢失&#xff1f;本想拷贝却手抖格式化了&#xff1f;那可以试试easyrecovery&#xff0c;这是一款十分强大的电脑数据恢复软件&#xff0c;界面简洁明了&#xff0c;操作也是十分的简单&#xff0c;只需要根据文字提示来进行操作即可进…

B端产品实战课读书笔记:第七章B端产品常用功能设计

目录 一、工作台 二、列表 三、搜索/筛选 3.1输入框搜索 3.2 单选/复选筛选 3.3 独立/联动筛选 3.4 其他 四、审批 4.1概念 4.2扩展功能 4.3设计要点 五、用户--角色--权限 5.1 什么是RBAC模型 5.2单系统的用户权限设计 5.3多系统的用户权限设计 六、可视化 6.…

用HTML+CSS做一个漂亮简单的音乐网站

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

[附源码]计算机毕业设计springboot新能源汽车租赁

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

基于STM32G431嵌入式学习笔记——九、IIC总线(一)EEPROM

一、基础原理剖析 先前的实验中我们都是通过程序设计语言去调用串口、定时器、引脚等硬件设备进行从0到有的功能实现&#xff0c;所有的指令以及数据均来自程序设计语言&#xff0c;而没有想计算机一样将一些必要数据存入存储器中。 IIC总线是我们嵌入式板子上进行数据传输的主…

太简单了,一文彻底搞懂Jenkins的用法

程序员宝藏库&#xff1a;https://gitee.com/sharetech_lee/CS-Books-Store 你想要的&#xff0c;这里都有&#xff01; 我在前公司的某个部门做过一年CV算法工程师&#xff0c;部门推崇全栈式开发。换句话说&#xff0c;做算法&#xff0c;不能只聚焦于算法&#xff0c;要全流…

阿里云NAS存储部署简介

近期在阿里云上部署OCP需要用到NAS&#xff0c;其中遇到NAS无法扩容的问题&#xff0c;在此简单笔记。 1、部署NAS 参照github.com\kubernetes-sigs\alibaba-cloud-csi-driver\docs\nas.md部署说明&#xff0c;需要执行以下步骤&#xff1a; Step 1: Create RBAC resource …

四、伊森商城 前端基础-Vue MVVM思想Vue安装单向绑定 p21

目录 一、MVVM 思想 二、Vue 简介 2.1、安装 2.1.1、初始化vue项目 -y默认确定 2.1.2、安装上vue的2.6.11版本 三、Vue的单向绑定 一、MVVM 思想 M&#xff1a;即 Model&#xff0c;模型&#xff0c;包括数据和一些基本操作 V&#xff1a;即 View&#xff0c;视图&#xf…

【Docker】常用命令总结

Docker是基于Go语言实现的云开源项目。Docker的主要目标是**“Build&#xff0c;Ship and Run Any App,Anywhere”**。也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理&#xff0c;使用户的APP&#xff08;可以是一个WEB应用或数据库应用等等&#xff09;及其运…

容器开发运维人员的 Linux 操作机配置优化建议

"工欲善其事必先利其器", 作为一个PAAS平台架构师, 容器相关技术(docker, k8s等)是必不可少的. 本文简单介绍下我自己的Linux操作机配置. 提升工作效率, 提高使用体验. :heart::heart::heart: :exclamation: 注意: 本文以CentOS 7.6 为例, RHEL7.6 操作类似. Ubuntu系…

为什么简历上不要轻易写“精通分布式”,一线大厂为什么面试必问分布式?

为什么要学习分布式&#xff1f; 作为一名后端 Java 程序员&#xff0c;我们在找工作写简历的时候除了高并发经验。一般情况下都还会写上自己熟悉/了解/掌握/精通分布式系统&#xff0c;所以高并发和分布式大多是成对出现的。 在某直聘网站上搜到的 Java 岗位 这么多金的一个知…

Shiro-SpringBoot (二)

在上一节中实现了在SpringBoot中使用Shiro做权限控制&#xff0c;但是针对上一节留下的不足点&#xff0c;在这里进行一下优化和改造&#xff0c;主要有一下几点: 支持AJAX请求支持FreeMarker模板URL拦截提取到yml配置文件 (一) 支持AJAX请求 如果是AJAX请求URL接口&#xff0…