代码随想录算法训练营day38 || 509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯

视频讲解:

手把手带你入门动态规划 | LeetCode:509.斐波那契数_哔哩哔哩_bilibili

带你学透动态规划-爬楼梯(对应力扣70.爬楼梯)| 动态规划经典入门题目_哔哩哔哩_bilibili

动态规划开更了!| LeetCode:746. 使用最小花费爬楼梯_哔哩哔哩_bilibili

动态规划理论:

对于动态规划问题,我将拆解为如下五步曲!

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

另外关于动态规划与贪心的区别,“动态规划中每一个状态一定是由上一个状态推导出来的;贪心没有状态推导,而是从局部直接选最优的” ,可见贪心可以是动态规划,但是动态规划不一定是贪心,暂时的理解,贪心策略的重心在于针对某个维度寻求其最优,从而间接解题;但是动态规划师多个维度同时考虑,通常是两个维度一同考虑,可能可以涉及三个维度,分别用dp数组下标以及数组元素含义来表示二到三个维度。贪心中出现的重叠区间、两个维度的题目,我们都是单独的操作各个维度。

 509. 斐波那契数

思路:学习掌握动态规划五步走战略。

// 时间复杂度O(n)
// 空间复杂度O(n)class Solution {public int fib(int n) {/*1、确定dp数组(dp table)以及下标的含义2、确定递推公式3、dp数组如何初始化4、确定遍历顺序5、举例推导dp数组*/if(n == 0)return 0;if(n == 1 || n == 2)return 1;// 我们五步走int[] dp = new int[n];      // 确定数组类型为int,数组的下标代表当前是第i各斐波那契数,每个数组的元素表示的是斐波那契数的值// dp[i] = dp[i-1]+dp[i-2]  // 确定递推公式dp[0] = 1;dp[1] = 1;                  // 完成数组初始化for(int i=2; i<n; i++)     //遍历顺序与初始化元素所处位置保持一致dp[i] = dp[i-1]+dp[i-2];return dp[n-1];}
}

70. 爬楼梯

思路:采用注释对本题的求解进行了描述

// 时间复杂度O(n)
// 空间复杂度O(n)class Solution {public int climbStairs(int n) {/*1、确定dp数组(dp table)以及下标的含义2、确定递推公式3、dp数组如何初始化4、确定遍历顺序5、举例推导dp数组*/if(n == 1 || n == 2)return n;// 确定dp数组为int类型,与函数返回类型保持一致;每个下标表示当前是第i节楼梯,数组元素表示爬到第i节楼梯有几种方法int[] dp = new int[n];// 确定递推方程,表示当前第i节楼梯可以由i-1节和i-2节楼梯爬一次上来,因此i节楼梯的方法数有i-1和i-2两个来源,本题所求的是总共的方法,因此两个位置的方法需求求和,但仅仅只需要求和就好,因为i是延续i-1与i-2这两个来源的方法数,如果只能一次爬一节,那么每一节楼梯都是延续上一节的攀爬方法,全局看只有一种方法// dp[i] = dp[i-1]+dp[i-2]+1;   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];}
}

746. 使用最小花费爬楼梯

思路:采用注释对本题的求解进行了描述。

// 时间复杂度O(n)
// 空间复杂度O(n+1)class Solution {public int minCostClimbingStairs(int[] cost) {if(cost.length == 1)return cost[0];if(cost.length == 2)return Math.min(cost[0], cost[1]);/*1、确定dp数组(dp table)以及下标的含义2、确定递推公式3、dp数组如何初始化4、确定遍历顺序5、举例推导dp数组*/// 确定dp数组,数组下标表示当前是第i节楼梯,数组值表示当前爬到此处所消耗的最小的体力// 因此dp[i]是不包括cost[i]的,而是在后续i+1位置或者i+2位置考虑最小体力时,需要dp[i]加上cost[i]来表示是从i位置出发往上的int n = cost.length;// 另外题目中表示cost数组中每个元素表示一节楼梯,必须要超过整个数组,即到达cost.length处才算到达顶楼,所以dp的长度为n+1.返回的值也是dp[n],而不是dp[n-1]int[] dp = new int[n+1];// 根据题意,可以从1级或2级楼梯直接开始,因此初始化都是0dp[0] = dp[1] = 0;// 与初始化元素所处在的位置保持一致for(int i=2; i<=n; i++){dp[i] = Math.min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2]); }return dp[n];}
}

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

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

相关文章

P8598 [蓝桥杯 2013 省 AB] 错误票据--2024蓝桥杯冲刺省一

点击跳转例题 思路: 直接进行模拟即可,需要注意的是有很多细节. 首先输入的问题:每个例子没有给出数量,那么我们怎么办呢? 当然是直接读入一整行! 那么我们如何分割呢?这里引入stringstream(知识总结); 利用getline()读入一整行,stringstream来过滤掉空格; #include <b…

springwebflux高性能服务

场景&#xff1a; 分别使用springwebmvc 使用tomcat &#xff08;tomcat 9&#xff09;和springwebflux 做一个简单的接口 &#xff0c;该接口返回一个随机数 压测环境&#xff1a; 4C 8G ECS 使用tomcat 压测结果 Max 抖动的厉害 保持压测的参数不变 使用webflux 压测结果 …

Power Designer的使用 创建数据库表模型

几年前用过PowerDesigner&#xff0c;好几年没用&#xff0c;有点忘记了&#xff0c;在这里记个笔记&#xff0c;需要的时候翻一翻 PowerDesigner版本16.5 下面的例子是以MySQL数据库为准 生成C#实体类 一 安装 1.1 安装 不让放网盘链接&#xff0c;审核通不过。。。。 …

【常见的Web前端框架——详细介绍】

常见的Web前端框架——详细介绍 常见的Web前端框架介绍 常见的Web前端框架介绍 Web前端开发工具和技术可以快速地发展和变化&#xff0c;但截至2023年&#xff0c;以下是一些常见和受欢迎的Web前端框架&#xff0c;每个都有自己独特的功能和用例。 React 由Facebook开发和维护…

react 之 zustand

zustand可以说是redux的平替 官网地址&#xff1a;https://zustand-demo.pmnd.rs/ 1.安装 npm i zustand2.基础使用 // zustand import { create } from zustand// 1. 创建store // 语法容易出错 // 1. 函数参数必须返回一个对象 对象内部编写状态数据和方法 // 2. set是用来…

Maven高级知识——分模块开发、继承与聚合

目录 一、分模块设计与开发 1.1 不分模块的问题 1.2 分模块设计 二、 继承与聚合 2.1 继承 2.1.1 继承关系 2.1.2 版本锁定 2.1.2.1 场景 2.1.2.2 介绍 2.1.2.3 实现 2.1.2.4 属性配置 2.2 聚合 2.2.1 介绍 2.2.2 实现 2.3 继承与聚合对比 三、Maven打包方式&#xff08;jar、w…

应对手机数据丢失的5大安卓数据恢复软件

我们都去过那里。您的手机上的数据丢失了&#xff0c;现在无法恢复。这尤其令人恐惧&#xff0c;因为我们的手机上都有如此多的信息。从图片、应用程序、个人信息&#xff0c;甚至是来自可能已不复存在的亲人的短信和语音邮件。这种情况确实发生了&#xff0c;而且也不仅仅是An…

Leetcode—382. 链表随机节点【中等】(水塘抽样法)

2024每日刷题&#xff08;一零九&#xff09; Leetcode—382. 链表随机节点 算法思想 我们可以在初始化时&#xff0c;用一个数组记录链表中的所有元素&#xff0c;这样随机选择链表的一个节点&#xff0c;就变成在数组中随机选择一个元素 实现代码 /*** Definition for si…

C++笔记(七)

递增运算符重载 //前置递增运算符重载&#xff1a; Integer& operator() { this->integer; return *this; } //后置递增运算符重载&#xff1a; Integer operator(int) { Integer temp *this; this->integ…

dns性能测试

一、DNS测速网站是一种通过测量DNS解析速度的工具,它提供了各种网络服务供应商和CDN厂商之间的服务比较,并帮助用户选择最快、最优的解析方案。下面是一些实测解析速度的DNS测速网站排行榜: DNSperf:它是由DNS性能测试工具Dnsperf支持的DNS测速网站之一。它的特点是数据来源…

STM32--USART串口(1)串口协议

一、通信接口 全双工&#xff1a;通信双方能够同时进行双向通信&#xff1b; 半双工&#xff1a;通信双方能够进行双向通信&#xff0c;但不能同时通信&#xff1b; 单工&#xff1a;只能从一个设备到另一个设备&#xff1b; 同步&#xff1a;接收方可以在时钟信号的指引下进…

线性代数:矩阵的秩

目录 一、矩阵的子式 二、矩阵的秩 三、重要性质定理推论 一、矩阵的子式 二、矩阵的秩 三、重要性质定理推论

031-安全开发-JS应用WebPack打包器第三方库JQuery安装使用安全检测

031-安全开发-JS应用&WebPack打包器&第三方库JQuery&安装使用&安全检测 #知识点&#xff1a; 1、三方库-JQuery-使用&安全 2、打包器-WebPack-使用&安全 演示案例&#xff1a; ➢打包器-WebPack-使用&安全 ➢第三方库-JQuery-使用&安全 #为什么…

dubbo+sentinel最简集成实例

说明 在集成seata后&#xff0c;下面来集成sentinel进行服务链路追踪管理&#xff5e; 背景 sample-front网关服务已配置好 集成 一、启动sentinel.jar 1、官网下载 选择1:在本地启动 nohup java -Dserver.port8082 -Dcsp.sentinel.dashboard.serverlocalhost:8082 -Dp…

开源项目TARZAN-NAV | 基于springboot的现代化导航网站系统

TARZAN-NAV 导航网站 一个基于 Spring Boot、MyBatis-Plus、h2database、ehcache、Docker、websocket等技术栈实现的导航网站系统&#xff0c;采用主流的互联网技术架构、全新的UI设计、支持一键源码部署&#xff0c;拥有完整的仪表板、导航管理&#xff0c;用户管理、评论管理…

real-time-emotion-detection 排坑记录

real-time-emotion-detection 排坑记录 任务踩坑回顾CV2包版本问题症状描述解决方法 模型文件路径问题症状描述解决办法 tensorflow版本问题症状描述解决办法 其他 任务 我之前跑了一个CNN情绪识别的开源代码&#xff0c;现在我想尝试把他用到我的另一个项目里。但当时那个项目…

QT中的QImage与QPixmap区别

在Qt中&#xff0c;QImage和QPixmap都是用于处理图像数据的类&#xff0c;但它们在设计上有所不同&#xff0c;适用于不同的用途。 QImage&#xff1a; - QImage是一个用于处理图像数据的类&#xff0c;它提供了访问图像每个像素的接口&#xff0c;并且可以在图像上进行像素级别…

使用MATLAB驱动USRP-N320实现OFDM自收自发

文章目录 前言一、收发代码二、截取一帧 OFDM三、执行主函数四、运行结果五、资源自取 前言 本文作为实验结果记录及测试&#xff0c;方便后面回顾所做的工作。本文基于一台电脑和一台 USRP 设备实现了 OFDM 自发和自收功能 一、收发代码 ofdm_tx_rx_test.m 核心代码&#x…

cartographer 源码

欢迎访问我的博客首页。 cartographer 源码

2024年美赛数学建模F题思路分析 - 减少非法野生动物贸易 (1)

# 1 赛题 问题F&#xff1a;减少非法野生动物贸易 非法的野生动物贸易会对我们的环境产生负面影响&#xff0c;并威胁到全球的生物多样性。据估计&#xff0c;它每年涉及高达265亿美元&#xff0c;被认为是全球第四大非法交易。[1]你将开发一个由数据驱动的5年项目&#xff0c…