算法训练营第四十一天 | LeetCode 509 斐波那契数列、LeetCode 70 爬楼梯、LeetCode 746 使用最小花费爬楼梯

LeetCode 509 斐波那契数列

这题动规五部曲都定义得比较明确。首先是dp数组下标,题目中给定F(0) = 0说明从0开始,dp[i]直接表示F(i)的值即可。递推公式也直接给出了,也给了开头两个作为递推基础的数值作为初始化依据。遍历顺序也指明是从前往后(即由下标从小到大递推)。

但是举例推导这一步也是不能省的,比如如果n小于等于1,那么就不能对dp[1]按照题目条件直接初始化,会报错。

最后代码如下:

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

LeetCode 70 爬楼梯

这题最后代码写出来很短,但其实用动规来写不是很简单。

首先我们要明确为什么要用动规。这题其实可以用回溯,也可以用递归。但是回溯更适合记录路径,递归需要消耗内存较大。而动规很好地拟合了这道题目,同时时间和空间开销都没有前两种方法那么高。

动规本意也就在这里——用循环和递推条件直接解决问题。但是代价就是想的东西要多一些,也就是我们要找出子问题到当前问题的推导条件和它们之间的关系,比如这题就是两级台阶下的位置到当前位置可以一步到,一级台阶下的位置到当前位置可以一步到,我们将这两个子问题的方法数加起来就得到了当前问题的解。但是问题来了,为什么不让两级前的台阶走两步呢?但按照我们对dp数组和下标的定义,dp[i]是走到第i级台阶的方法数,上面这个问题实际上属于一级前台阶方法数而不属于两级前台阶方法数了。而且用这种视角来思考的话,用的就不是动规,因为那不是子问题到当前问题的推导,而是实际事情发生中的状态。这是动规和平常思路之间最大的差别了。

到这里我们递推公式和dp数组定义和下标含义就都得出来了。接下来初始化方法和遍历顺序是这样:我们找出能够和最开始子问题发生关联的最大下标,把它在递推公式中的子问题dp值初始化即可。这里我们需要结合实际情况设置dp[0]和dp[1]为1,因为能够和最开始一级台阶都没爬的时候的子问题发生关联的最大下标就是2了。遍历顺序从小到大也就是从前往后进行。

举例推导方面和上一题差不多,主要就是对比较小的时候的一些特例进行特殊考量。

代码如下:

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

LeetCode 746 使用最小花费爬楼梯

这题其实和上一题很像,不过递推逻辑要稍微变一下,变成取两级之前台阶+从该台阶跳上来开销和一级之前台阶+从该台阶跳上来开销中比较小的那个。子问题和当前问题之间关系是一样的。所以dp数组下标和含义基本一致。这题由于加入了开销,所以也无法像上一题那样从所有台阶下面开始往上跳,初始化时候直接将dp[0]和dp[1]初始化为1即可,原因和上一题一样,这里不再赘述。

遍历顺序从下往上对应也是从小到大。

代码如下:

class Solution {public int minCostClimbingStairs(int[] cost) {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]);}return dp[cost.length];}
}

很简洁,但背后思考过程很丰富。

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

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

相关文章

有哪些和excel类似或基于excel扩展的软件?

Workfine数字化管理平台是一款易上手、便捷、高效的数字化管理工具&#xff0c;是类excel设计&#xff0c;更容易上手进行企业业务系统的搭建&#xff0c;在信息记录和表格管理方面&#xff0c;比excel更简单易用&#xff0c;在这里&#xff0c;给大家挑几个点展示下~ 首先表格…

oracle碎片整理

1、move碎片整理 1) DECLARE tmp_val VARCHAR2 (500); BEGIN FOR REC IN (SELECT TABLE_NAME FROM USER_TABLES ) LOOP tmp_val:=ALTER TABLE || REC.TABLE_NAME || MOVE; BEGIN EXECUTE IMMEDIATE tmp_val; DBMS_OUTPUT.ENABLE(buffer_size => null); DBMS_OUTPUT.put_l…

一键恢复,U盘被删除文件方法分享

U盘是一种轻巧便携的移动储存工具&#xff0c;在日常的工作以及学习过程中&#xff0c;我们经常性会使用它来传输、备份、存储一些重要文件。然而&#xff0c;随着后期使用频率的增多&#xff0c;会在不同的设备上来回插拔&#xff0c;也就给里面存储文件带来了很大的隐患。比方…

I.MX6ULL的蜂鸣器实验-GPIO输出实验

系列文章目录 I.MX6ULL的蜂鸣器实验 I.MX6ULL的蜂鸣器实验 系列文章目录一、前言二、有源蜂鸣器简介三、硬件原理分析四、程序编写4.1程序编写前提工作4.2程序编写 五、编译下载验证5.1编写 Makefile 和链接脚本5.2编译下载 一、前言 在 I.MX6U-ALPHA 开发板上有一个有源蜂鸣器…

九宫格转圈圈抽奖活动,有加速,减速效果

在线访问demo和代码在底部 代码&#xff0c;复制就可以跑 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><tit…

SpringBootTest测试框架五

示例 package com.xxx;import com.xxx.ut.AbstractBasicTest; import com.xxx.ut.uttool.TestModel; import

Hive操作

–默认路径/user/hive/warehouse. 建数据库不可以指定路径 create database ods_housesys_db; 在ods_housesys_db中建表&#xff0c;指定表路径/user/hdpu/ods_housesys_db/ods_broker。 会自动创建ods_housesys_db/ods_broker两级路径。但是hdpu需要自己创建。 执行语句时要…

强化学习中model-free和model-based

强化学习中model-free和model-based 1.Model-Based 强化学习算法2.Model-Free 强化学习算法3.对比总结 在强化学习&#xff08;Reinforcement Learning, RL&#xff09;中&#xff0c;算法通常分为两大类&#xff1a;model-based 和 model-free。它们的主要区别在于是否显式地构…

Thingsboard规则链:GPS Geofencing Filter节点详解

​​​​​​​ 引言 GPS Geofencing Filter节点具体作用 使用教程 源码浅析 应用场景与案例 物流与运输 农业智能化 城市安全管理 结语 引言 在物联网技术迅速发展的今天&#xff0c;精准的位置服务已成为诸多应用不可或缺的一环。作为物联网平台的佼佼者&…

Python应用开发——30天学习Streamlit Python包进行APP的构建(2)

🗓️ 天 14 Streamlit 组件s Streamlit 组件s 是第三方的 Python 模块,对 Streamlit 进行拓展 [1]. 有哪些可用的 Streamlit 组件s? 好几十个精选 Streamlit 组件s 罗列在 Streamlit 的网站上 [2]. Fanilo(一位 Streamlit 创作者)在 wiki 帖子中组织了一个很棒的 St…

【机器学习】随机梯度下降算法以及优化

一、概述&#xff1a; 什么是梯度下降&#xff1f; 梯度下降法的基本思想可以类比为一个下山的过程。 假设这样一个场景:一个人被困在山上&#xff0c;需要从山上下来(i.e.找到山的最低点&#xff0c;也就是山谷)。但此时山上 的浓雾很大&#xff0c;导致可视度很低。因此&am…

【Postman接口测试】第一节.接口测试基础认识

文章目录 前言一、接口的基础 1.1 什么是接口 1.2 软件为什么需要接口 1.3 为什么要做接口测试二、接口测试的基础 2.1 接口测试介绍 2.2 接口测试的实现方式三、接口返回数据和JSON详解四、接口测试协议详解总结 前言 一、接口的基础知识 1.1 什么是…

出生率下降 幼儿园如何面对困境创新转型

从2023年开始&#xff0c;全国幼儿园生存发展问题成为教育界焦点&#xff0c;民办幼儿园更为焦虑满满。当今年轻人对待婚姻和生育的观念&#xff0c;的确让上一辈人始料未及。那么&#xff0c;是否幼儿园再也不可能回到巅峰时期了&#xff1f;是否很多幼儿教育者将无用武之地呢…

1+x(Java)中级题库易混淆理论题(二)

冷备份实质就是数据库相关文件的复制 System.in是字节流 Map集合中的key是无序的 protected不能用于修饰类 接口中所有抽象方法默认使用public修饰 DML操作有&#xff1a;INSERT UPDATE DELETE SQL 语句中进行 group by 分组时&#xff0c;可以不写 where 子句 使…

【Python设计模式03】简单工厂模式

简单工厂模式&#xff08;Simple Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它通过专门定义一个工厂类来负责创建其他类的实例&#xff0c;而不是在客户端代码中直接实例化对象。这样可以将对象创建的过程与使用对象的过程分离&#xff0c;提高代码的可维护…

【权威出版】2024年土木工程、抗震构造与材料技术国际会议(CSCMT 2024)

2024年土木工程、抗震构造与材料技术国际会议 2024 International Conference on Civil Engineering, Seismic Construction, and Material Technology 【1】会议简介 2024年土木工程、抗震构造与材料技术国际会议即将召开&#xff0c;这是一次集结全球土木工程、抗震构造与材料…

网络其他重要协议(DNS、ICMP、NAT)

1.DNS DNS是一整套从域名映射到IP的系统 1.1 DNS背景 TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序&#xff0c;但是IP地址不方便记忆&#xff0c;例如我们想访问百度就会在浏览器中输入baidu.com而不是百度的IP地址。于是人们发明了一种叫主机名的东西, 是…

瞄准金融行业的远控木马:SpyNote

Android 间谍软件是最常见的恶意软件之一&#xff0c;攻击者通过 Android 间谍软件来跟踪用户位置、检查 Web 浏览记录&#xff0c;甚至窃取敏感信息&#xff08;密码和信用卡号等&#xff09;&#xff0c;其对银行机构与客户构成的威胁与 Android 银行木马相媲美。间谍软件还可…

dubbo 无注册中心 通过url直接调用

1、依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0…

消息回复及时,客户不流失!这个微信自动回复设置快快码住!

你是不是也遇到过由于回复不及时&#xff0c;导致客户流失的情况发生&#xff1f;或是好友申请太多&#xff0c;来不及通过&#xff1f; 别担心&#xff0c;试试个微管理系统&#xff0c;让你实现自动回复&#xff0c;提高回复效率&#xff01; 1、自动通过好友 当有新的好友…