代码随想录Day32 动态规划01 LeetCodeT509 斐波那契数列 T70 爬楼梯 T746 爬楼梯的最小消耗

news2024/9/25 9:34:46

前言:动态规划基础

动态规划首先可以解决的问题有背包问题,打家劫舍问题,股票问题,子序列问题等,主要是将一个大的问题切分成多个重叠的子问题,所以动态规划一定是上一个状态递推过来的,有一个重要的状态转移方程,但是这也并不是解题的全部,我们将动态规划的题目基本分为五步来完成,

1.搞明白dp数组的含义

2.搞明白状态转移方程怎么写

3.数组如何初始化

4.确定遍历方式

5.在错误的时候打印出dp数组查看分析问题

LeetCode T509 斐波那契数列

题目链接:509. 斐波那契数 - 力扣(LeetCode)

题目思路:

1.dp数组定义

这里我们定义一个数组来表示斐波那契数列

 int[] dp = new int[n+1];

为什么要定义n+1个长度呢?你想想求dp[3]就知道了,前面有三个数字dp[0] = 0,dp[1] = 1      dp[2] = 1.

2.下面明白状态转移方程

我们都知道斐波那契数列式的第n项是由前两个加起来

 dp[i] = dp[i-1]+dp[i-2];

3.初始化数组

初始化前两项,因为这两项要知道才能得到第三项

4.确定遍历方式

由于我们只需要得到第n项,直接for循环即可从前向后遍历

5.打印dp数组

题目代码:

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


    }
}

注:这题也可以使用递归,是递归的经典例题,但是递归太慢了 

LeetCode T70 爬楼梯

题目链接:70. 爬楼梯 - 力扣(LeetCode)

题目思路:

1.搞明白dp数组的含义

dp数组代表到到达第i个台阶有几种方法

2.搞明白状态转移方程怎么写

因为到达第i个台阶可能是两步上来的,也可能是一步上来的,那么我们到第i阶台阶就是第i-1个台阶的方法数加上i-2阶的方法数

这道题的推导公式是这样得来的:
在到达第n层的上一步,我们只有两个选择,走一步,或者走两步。
如果是走一步,我们需要先通过 f(n-1)种方式到达 n-1 层
如果是走两步, 我们需要通过 f(n-2)种方式到达第 n - 2 层
所以综上有 f(n) = f(n-2) + f(n-1)

dp[i] = dp[i-1] + dp[i-2];

3.数组如何初始化

初始化dp[0] = 1,dp[1] = 2

4.确定遍历方式

顺序遍历即可

5.在错误的时候打印出dp数组查看分析问题

题目代码:

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

    }
}

LeetCode T746 爬楼梯的最小消耗

题目链接:746. 使用最小花费爬楼梯 - 力扣(LeetCode)

题目思路:

1.搞明白dp数组的含义

这里的dp数组表示的是爬楼梯到本层的最小消耗

2.搞明白状态转移方程怎么写

从前一层爬一层的消耗和前两层爬两层的消耗取最小值就是到达本层的最小消耗

3.数组如何初始化

由于题目说我可以选择在第层或者第一层出发,所以dp[0] = 0;dp[1] = 0

int[] dp = new int[cost.length+1];
dp[i] = Math.min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);

4.确定遍历方式

从前往后顺序遍历即可,因为上层是围绕着下层结果而产生的

5.在错误的时候打印出dp数组查看分析问题

注:这里爬到的是cost数组后面那一层而不是cost数组的最后一个元素所在位置

题目代码:

class Solution {
    public int minCostClimbingStairs(int[] cost) {
        int[] dp = new int[cost.length+1];
        if(cost.length == 0){
            return 0;
        }else if(cost.length == 1){
            return cost[0];
        }else{
            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]);
            }
        }
        return dp[cost.length];


    }
}

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

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

相关文章

【AI视野·今日Sound 声学论文速览 第八期】Wed, 20 Sep 2023

AI视野今日CS.Sound 声学论文速览 Wed, 20 Sep 2023 Totally 1 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers Accelerating Diffusion-Based Text-to-Audio Generation with Consistency Distillation Authors Yatong Bai, Trung Dang, Dung Tran, K…

Qt QUrlQuery详解

1.概述 QUrlQuery 是Qt框架中用于操作URL查询部分的类&#xff0c;提供了一些方法来解析和构造URL查询字符串。URL查询部分通常是在URL中使用 "?" 后面的一串参数&#xff0c;用于传递数据或配置信息。 如下图所示&#xff1a;也就是 "?" 后面的一串参数…

30秒get视频号视频如何下载,保存视频号视频到本地方法!

终于可以告别无法下载视频号视频的烦恼啦&#xff01;下面是一些只需 30 秒就能get到的t视频号视频如何下载方法&#xff0c;让我们一起来探索如何保存视频号视频到本地方法吧&#xff01; 首先&#xff0c;要记得这些方法仅适用于个人观看或学习使用&#xff0c;不可用于商业用…

SpringBoot,使用JavaMailSender发送邮件(含源码)。

本文主要讲解使用JavaMailSender发送邮件&#xff0c;并给出对应的参考案例、源码。 1、使用的依赖jar包 JavaMailSender发送邮件&#xff0c;只需要 "spring-boot-starter-mail" jar包就可以。考虑到邮件发送时&#xff0c;使用 Hutool工具生成Excel文件做为附件&am…

4.编译多线程应用程序

在不同平台下使用多线程的程序编译时的编译选项设置如下图所示。 gcc下编译时我们会碰到两个选项-pthread和-lpthread&#xff0c;记住推荐使用-pthread而不是-lpthread&#xff0c;原因如下 -lpthread只是起到链接pthread库的作用&#xff1b;而-pthread选项除了会链接pthrea…

java爱心代码,脱单必备

package com.example.test;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Image;import java.awt.Toolkit; import java.util.jar.JarOutputStream;import javax.swing.JFrame;class Cardioid extends JFrame {//定义窗口大小private …

MySQL数据类型、字符集、引擎、索引

MySQL数据类型、字符集、引擎、索引 数据类型 整型浮点类型字符类型时间类型复合类型整型 MySQL数据类型所占字节值范围tinyint1字节-128~127smallint2字节-32768~32767mediumint3字节-8388608~8388607int4字节-2147483648~2147483647bigint8字节9.22*10的18次方在创建表字段时…

《Linux创建新用户》

本文主要讲解linux下如何进行新用户创建、登录以及删除操作 文章目录 1、创建新普通用户2、登录普通用户&#xff08;一&#xff09;已经创建过普通用户&#xff08;二&#xff09;第一次创建普通用户 3、普通用户切换至超级用户&#xff08;root&#xff09;及超级用户&#x…

【NLP文本分类算法集锦】零基础入门经典文本分类项目实战(附代码+数据集)

前言 大家好&#xff0c;我是阿光。 本专栏整理了《NLP文本分类算法集锦》&#xff0c;内包含了各种常见的中英文文本分类算法&#xff0c;以及常见的NLP任务&#xff1a;情感分析、新闻分类以及谣言检测等。 文本分类是NLP的必备入门任务&#xff0c;在搜索、推荐、对话等场…

C++面试——多线程详解

C11提供了语言层面上的多线程&#xff0c;包含在头文件<thread>中。它解决了跨平台的问题&#xff0c;提供了管理线程、保护共享数据、线程间同步操作、原子操作等类。C11 新标准中引入了5个头文件来支持多线程编程&#xff0c;如下图所示&#xff1a; 多进程与多线程 多…

微信黑名单在哪里找出来怎么恢复微信好友?

微信黑名单在哪里找出来&#xff1f; 1、打开手机微信&#xff0c;点击底部「我」进入找到「设置」&#xff1b; 2、在微信设置内找到「朋友权限」并点击进入&#xff1b; 3、在微信设置朋友权限内&#xff0c;即可找到微信通讯录黑名单&#xff0c;并点击微信「通讯录黑名单」…

1200*B. Interesting Subarray(贪心规律)

Problem - 1270B - Codeforces 解析&#xff1a; 可以发现&#xff0c;对于某个符合条件的数列&#xff0c;如果两个最值不在两端&#xff0c;那么可以删去两端多余的元素直到两个最值在两端为止。 我们观察某两个相邻元素a、b&#xff0c;可以发现这两个元素组成的序列成立的条…

基于旗鱼算法的无人机航迹规划-附代码

基于旗鱼算法的无人机航迹规划 文章目录 基于旗鱼算法的无人机航迹规划1.旗鱼搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用旗鱼算法来优化无人机航迹规划。 1.旗鱼搜索算法 …

C语言 每日一题 PTA 10.30 day8

1.高空坠球 皮球从某给定高度自由落下&#xff0c;触地后反弹到原高度的一半&#xff0c;再落下&#xff0c;再反弹&#xff0c;……&#xff0c;如此反复。问皮球在第n次落地时&#xff0c;在空中一共经过多少距离&#xff1f;第n次反弹的高度是多少&#xff1f; 输入格式 : …

excel求差公式怎么使用?

利用excel求差&#xff0c;可能有许多的小伙伴已经会了&#xff0c;不过还是存在一些不太熟悉的朋友们&#xff0c;所以这里有必要讲解一下。其实求差的实现主要就是一个公式&#xff0c;就是用一个单元格中的数字“减去”另一个单元格中的数字“等于”第三个单元格。此公式掌握…

854数据结构简答题---图

1.&#xff08;2015期末&#xff09;已知无环路有向图如图3.1,请在表2、表3中填写出各事件的最早发生时间、最迟发生时间、活动的最早、最迟开始时间&#xff0c;给出关键活动及关键路径。 从源点到汇点的有向路径可能有多条&#xff0c;所有路径中&#xff0c;具有最大路径长…

网络工程综合试题(三)

1. BGPMLS的作用是什么&#xff1f; BGPMLS&#xff08;BGP Monitoring Protocol and Label Switching&#xff09;是一种用于监控和管理BGP&#xff08;Border Gateway Protocol&#xff09;网络的协议和技术。它结合了BGP和MPLS&#xff08;Multiprotocol Label Switching&am…

超级英雄的导航之旅:动态路由和嵌套路由

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

linux下backtrace函数获取函数调用堆栈信息用法

backtrace用途介绍&#xff1a; 使用backtrace可以查看函数的调用关系&#xff0c;也可以查看程序异常时的函数调用关系。配置生成coredump生成文件的方法也可以捕获异常&#xff0c;但产生的coredump文件内存较大&#xff0c;backtrace函数的方法占用的内存小。 需求&#x…

这个人工智能社区火爆了!手把手教你零代码搞定大模型应用开发

想给自己做个私人定制的旅行攻略&#xff0c;满足个性化的出游需求&#xff0c;还要细致关注到天气、穿衣、老人孩子的作息等等&#xff0c;但太耗时费力怎么办&#xff1f;让AI帮忙搞定。一位开发者在AI Studio星河大模型社区用短短数小时就做好了“旅行规划家”智能应用。像这…