代码随想录算法训练营第三十五天(dp)|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

news2024/10/7 18:23:16

509. 斐波那契数

在这里插入图片描述

题目链接:509. 斐波那契数
文档讲解:代码随想录
状态:so easy

思路:最简单的递归就不说了。使用动态规划的话,状态转移方程 dp[i] = dp[i - 1] + dp[i - 2]

题解:

public int fib(int n) {
    // 如果 n 是 0,直接返回 0
    if (n == 0) {
        return 0;
    }
    // 如果 n 是 1,直接返回 1
    if (n == 1) {
        return 1;
    }
    // 创建一个数组来存储斐波那契数列的计算结果
    int[] dp = new int[n + 1];
    // 初始化第一个斐波那契数为 0
    dp[0] = 0;
    // 初始化第二个斐波那契数为 1
    dp[1] = 1;
    // 从第三个数开始计算,每个数都是前两个数之和
    for (int i = 2; i <= n; i++) {
        dp[i] = dp[i - 1] + dp[i - 2];
    }
    // 返回第 n 个斐波那契数
    return dp[n];
}

70. 爬楼梯

在这里插入图片描述

题目链接:70. 爬楼梯
文档讲解:代码随想录
状态:还行

思路:第n节台阶可以是第n-1节台阶走一步,也可以通过第n-2节台阶走两步到达,所以状态转移方程:dp[i] = dp[i - 1] + dp[i - 2]
注意:dp[i]的含义是到达第i节台阶有几种方案,而不是有多少步!!!

题解:

public int climbStairs(int n) {
    // 如果只有 1 级台阶,只有一种方法可以到达,即一步跨上去
    if (n == 1) {
        return 1;
    }
    // 创建一个数组来存储每一级台阶的不同走法
    int[] dp = new int[n + 1];
    // 初始化第 1 级台阶的走法,只有一种走法
    dp[1] = 1;
    // 初始化第 2 级台阶的走法,有两种走法:每次跨一级,或者一次跨两级
    dp[2] = 2;
    // 从第 3 级台阶开始计算,每一级台阶的走法是前两级台阶走法之和
    // 因为到达该级台阶的最后一步可以是从前一级台阶跨一步,或者从前二级台阶跨两步
    for (int i = 3; i <= n; i++) {
        dp[i] = dp[i - 1] + dp[i - 2];
    }
    // 返回第 n 级台阶的走法总数
    return dp[n];
}

746. 使用最小花费爬楼梯

在这里插入图片描述

题目链接:746. 使用最小花费爬楼梯
文档讲解:代码随想录
状态:还行

动态规划状态转移方程:

到达第 i 级台阶有两种选择:

  1. 从第 i-2 级台阶跨两步到达第 i 级台阶,花费为 dp[i-2] + cost[i-2]。
  2. 从第 i-1 级台阶跨一步到达第 i 级台阶,花费为 dp[i-1] + cost[i-1]。

因此,dp[i] = Math.min(dp[i - 2] + cost[i - 2], dp[i - 1] + cost[i - 1])。

初始化:

由于可以从第 0 级台阶或第 1 级台阶开始,不需要花费,因此 dp[0] = 0 和 dp[1] = 0。

题解:

public int minCostClimbingStairs(int[] cost) {
    // 创建一个数组 dp 来存储到达每一级台阶的最小花费
    int[] dp = new int[cost.length + 1];
    // 初始化 dp[0] 和 dp[1],因为开始可以从第 0 级或第 1 级台阶开始,不需要花费
    dp[0] = 0;
    dp[1] = 0;
    
    // 从第 2 级台阶开始计算每一级台阶的最小花费
    for (int i = 2; i <= cost.length; i++) {
        // 到达第 i 级台阶有两种选择:
        // 1. 从第 i-2 级台阶跨两步到达第 i 级台阶,花费为 dp[i-2] + cost[i-2]
        // 2. 从第 i-1 级台阶跨一步到达第 i 级台阶,花费为 dp[i-1] + cost[i-1]
        // 取这两种选择中的最小值作为到达第 i 级台阶的最小花费
        dp[i] = Math.min(dp[i - 2] + cost[i - 2], dp[i - 1] + cost[i - 1]);
    }
    
    // 返回到达最后一级台阶的最小花费
    return dp[cost.length];
}

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

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

相关文章

miniconda 弹出黑窗

etc\conda\activate.d 和 envs 中不同环境中的 etc\conda\activated.d&#xff0c;只保留下图中的三个文件即可。

综合项目实战--jenkins节点模式

一、DevOps流程 DevOps是一种方法论,是一系列可以帮助开发者和运维人员在实现各自目标的前提下,向自己的客户或用户交付最大化价值及最高质量成果的基本原则和实践,能让开发、测试、运维效率协同工作的方法。 DevOps流程(自动化测试部分) DevOps完整流程 二、gitee+j…

Leica Cyclone 3DR2024 一款功能强大的点云建模软件下载License获取

Leica Cyclone 3DR 2024 是一款功能强大的点云建模软件&#xff0c;使用旨在为用户提供全面的点云管理、自动化的点云分析&#xff0c;结合强大的建模&#xff0c;在一个直观友好的环境中&#xff0c;专注的完成挑战&#xff0c;提高生产力&#xff0c;轻松创建并交付专业的成果…

AWTK 用 icon_at 属性设置图标位置

1. style 在 style 文件中通过 icon_at 属性设置图标位置。 <style name"right_bottom" icon_at"right_bottom"><normal icon"unchecked_right_bottom" /><pressed icon"unchecked_right_bottom" /><over i…

揭开大语言模型(LLM)内部运作的算法逻辑

本文探讨了 Anthropic 的突破性技术&#xff0c;以揭示大型语言模型 (LLM) 的内部工作原理&#xff0c;揭示其不透明的本质。通过深入研究LLM Claude Sonnet 的“大脑”&#xff0c;Anthropic 增强了人工智能的安全性和可解释性&#xff0c;为人工智能的决策过程提供了更深入的…

语言模型:文本表征词嵌入技术调研

1 文本表征 文本表征是自然语言处理中的关键部分&#xff0c;尤其在当前大模型快速发展的背景下。由于大模型存在知识有限、处理文本长度有限、保密要求和大模型幻觉等问题&#xff0c;结合外部数据显得尤为重要。 为了便于存储和检索&#xff0c;除了保存纯文本外&#xff0…

机器学习基础:开源库学习-Numpy科学计算库

目录 Numpy科学计算库 什么是多维数组 数组基础 高维数组 操作和创建数组 Numpy介绍 创建数组 数组的属性 二维数组 三维数组 数组元素的数据类型 创建特殊的数组 np.arange() np.ones() np.zeros() np.eye() np.linspace() np.logspace() asarray() 数组运…

数据结构—判断题

1.数据的逻辑结构说明数据元素之间的顺序关系&#xff0c;它依赖于计算机的存储结构。 答案&#xff1a;错误 2.(neuDS)在顺序表中逻辑上相邻的元素&#xff0c;其对应的物理位置也是相邻的。 答案&#xff1a;正确 3.若一个栈的输入序列为{1, 2, 3, 4, 5}&#xff0c;则不…

模拟城市5: 未来之城 全DLC for Mac 下载安装包

模拟城市5&#xff1a;未来之城&#xff08;SimCity BuildIt&#xff09;是一款由Maxis开发并由 Electronic Arts&#xff08;EA&#xff09;发行的城市建设和管理模拟游戏。这款游戏最初在2014年发布&#xff0c;适用于iOS、Android以及Windows Phone平台&#xff0c;随后在20…

每天五分钟计算机视觉:人体姿势识别

本文重点 人体姿势识别是计算机视觉领域的一个重要研究方向,旨在通过图像或视频数据自动检测并识别出人体的各种姿势和动作。随着深度学习技术的快速发展,基于神经网络的方法在这一领域取得了显著进展。神经网络,特别是卷积神经网络(CNN)和循环神经网络(RNN),因其强大…

NVIDIA Visual Profiler启动失败报错

在银河麒麟V10安装完NVIDIA后&#xff0c;想着试着运行一下NVIDIA Visual Profiler&#xff0c;发现报错&#xff0c;如下图。 照着提示翻阅日志文件。看见其中写着 !ENTRY com.nvidia.viper.birt 2 0 2024-06-30 08:39:39.806 !MESSAGE Could not resolve module: com.nvidi…

【保姆级教程+配置源码】在VScode配置C/C++环境

目录 一、下载VScode 1. 在官网直接下载安装即可 2. 安装中文插件 二、下载C语言编译器MinGW-W64 三、配置编译器环境变量 1. 解压下载的压缩包&#xff0c;复制该文件夹下bin目录所在地址 2. 在电脑搜索环境变量并打开 3. 点击环境变量→选择系统变量里的Path→点击编…

内容营销专家刘鑫炜:碎片化时代,小微企业内容营销如何乘风破浪

当下&#xff0c;互联网高度发达&#xff0c;技术的飞速进步和社交媒体的普及&#xff0c;使得信息的产生和传播速度达到了前所未有的高度。互联网上的内容如同潮水般汹涌而来&#xff0c;不断刷新着我们的认知边界&#xff0c;但与此同时&#xff0c;这也导致了人们的注意力被…

SpringBoot:集成机器学习模型进行预测和分析

引言 机器学习在现代应用程序中扮演着越来越重要的角色。通过集成机器学习模型&#xff0c;开发者可以实现智能预测和数据分析&#xff0c;从而提高应用程序的智能化水平。SpringBoot作为一个强大的框架&#xff0c;能够方便地集成机器学习模型&#xff0c;并提供灵活的部署和…

各省地区市场化指数及分项指数+匹配上市公司+计算代码(1997-2023年)

数据简介&#xff1a;市场化指数是一个用于评估国家市场化程度的指标体系。该指数由中国经济学家樊纲提出&#xff0c;旨在衡量中国经济中市场化的程度和质量。 市场化指数包括经济自由度、金融市场化、行政干预程度以及社会保障水平等四个方面的指标。 其中&#xff0c;经济…

有关主流编程语言的几个问题及对比

参考&#xff1a;编程语言的历史&#xff08;https://blog.csdn.net/david_lv/article/details/104765347&#xff09; 静态与动态语言的优缺点分析 什么是强类型&#xff0c;什么是弱类型&#xff1f;哪种更好些&#xff1f;为什么? 强类型和弱类型的区别 几种常见的开发语言…

Springboot学习中错误与解决方法合集

1. 报错CONDITIONS EVALUATION REPORT &#xff08;1&#xff09;现象 类似&#xff1a; 出现问题原因&#xff1a;日志文件过多 &#xff08;2&#xff09; 解决方法&#xff1a; 在application.yml配置文件中增加 logging:level:org.springframework.boot.autoconfigure…

ComfyUI效率节点Efficient示例

文生图工作流 Efficient Loader节点用于高效加载和缓存模型 ckpt_name&#xff1a;选择要加载的检查点模型的名称。通常选择你的主要模型名称 vae_name&#xff1a;定义要使用的VAE&#xff08;变分自编码器&#xff09;模型。一般选择与你的主要模型匹配的VAE&#xff0c;或者…

OpenGL3.3_C++_Windows(24)

渲染平行光阴影 阴影作用&#xff1a; 有了阴影的渲染&#xff0c;更容易地区分出物体之间的位置关系&#xff0c;如何判断片段是否在阴影中&#xff1f; 普通思路&#xff1a; 以光的位置为视角进行渲染&#xff0c;我们绘制一条从光源出发的射线&#xff0c;测试更新射线经过…

015、HBase分布式数据库与传统数据库的深度对比

目录 HBase分布式数据库与传统数据库的深度对比 1. 数据模型 1.1 传统关系型数据库 1.2 HBase 2. 扩展性 2.1 传统关系型数据库 2.2 HBase 3. 查询语言 3.1 传统关系型数据库 3.2 HBase 4. 事务支持 4.1 传统关系型数据库 4.2 HBase 5. 数据一致性 5.1 传统关系型…