算法王冠上的明珠——动态规划之斐波那契数列问题(第二篇)

算法王冠上的明珠——动态规划之斐波那契数列问题(第二篇)

目录

1. LeetCode746. 使用最小花费爬楼梯

2. LeetCode91. 解码方法


今天我们继续来聊一聊动态规划的斐波那契数列类型的题目

1. LeetCode746. 使用最小花费爬楼梯

这个题目的话也是比较简单的。就是要求我们计算在可以一次走一步或者两步的情况下,到达结尾时的最小消耗。

所以在这道题里面它的状态表示就是走到当前位置的值的最小消耗。

所以在这道题里面它的状态转移方程就是dp[i]=min(dp[i-1],dp[i-2])+c[i]。

它的初始化就是第0个位子设置为c[0],第一个位置设置为c[1]。(怎么设置是因为我们是不知道开始的那个位置的大小,而且因为我们的状态转移方程需要依靠前两个位置的值,所以我们在这里就直接初始化前两个)。

填表顺序就是从前往后就好。

返回值就是dp表第sz-1个位置的值和第sz-2个位置的值的最小值。

class Solution { public: int minCostClimbingStairs(vector<int>& c) { int sz=c.size(); vector<int> dp(sz+1); dp[0]=c[0]; dp[1]=c[1]; for(int i=2;i<sz;++i) { dp[i]=min(dp[i-1],dp[i-2])+c[i]; } return min(dp[sz-1],dp[sz-2]); } };

2. LeetCode91. 解码方法

这道题的话就是说,现在给一个数组,然后不同的数字可以代表不同的字母,可以单个字母,也可以两个字母拼在一起,然后要求我们返回这个数组可以组成的不同的字母串的数量。

这道题的话不难,就是多了一些细节上的判断。

在这道题里面它的状态表示就是以当前位置为结尾的字母串数量的最大值。

在这道题里面它的状态转移方程就需要分条件来判断了,如果当前位置不为0的话,那么就先dp[i]+=dp[i-1],然后如果可以和前面一个数字组成大于9并且小于27的数的话,那么dp[i]再+=dp[i-2]。(这边之所以需要判断两遍是因为当前位置为结尾和当前数加上前一个数一起作为结尾,所以需要计算两遍)

]它的初始化就是通过判断的方式来先初始化前面两个数。

填表顺序就是从前往后就好。

返回值就是dp表第sz-1个位置的值就好。(因为必须是所有数字全部用上)

class Solution { public: int numDecodings(string s) { int sz=s.size(); vector<int> dp(sz); if(s[0]!='0') dp[0]=1; else return 0; if(sz==1) return 1; if(s[1]!='0') dp[1]+=dp[0]; if((s[0]-'0')*10+s[1]-'0'<27) dp[1]++; for(int i=2;i<sz;++i) { if(s[i]!='0') dp[i]+=dp[i-1]; if(((s[i-1]-'0')*10+s[i]-'0')<27&&((s[i-1]-'0')*10+s[i]-'0')>9) dp[i]+=dp[i-2]; } return dp[sz-1]; } };

Read more

Flutter 三方库 collection — 鸿蒙应用全方位集合操作与算法增强利器,实现鸿蒙深度适配下的高效容器过滤与优先级队列实战全解析(适配鸿蒙 HarmonyOS Next ohos)

Flutter 三方库 collection — 鸿蒙应用全方位集合操作与算法增强利器,实现鸿蒙深度适配下的高效容器过滤与优先级队列实战全解析(适配鸿蒙 HarmonyOS Next ohos)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net。 Flutter 三方库 collection — 鸿蒙应用全方位集合操作与算法增强利器,实现鸿蒙深度适配下的高效容器过滤与优先级队列实战全解析 前言 在鸿蒙(OpenHarmony)应用开发中,数据结构的选择往往决定了逻辑的成败。当标准的 List、Set、Map 无法满足更高级的需求(例如:需要一个自动按优先级排序的任务队列,或者需要判断两个深度嵌套的 Map 是否完全一致)时,开发者就需要引入更强大的集合支持。 collection 是 Dart 官方维护的最核心基础库之一。它不仅补充了大量缺失的容器类型(如 PriorityQueue、Heap),还为原生集合提供了极其丰富的扩展工具类(如 ListEquality、CanonicalizedMap)。在 Flutter for OpenHarmony 的底层架构实践中,它是处理复杂业务逻辑、优化检索效率的必备“基石”。 一、原理解析 / 概念介绍

By Ne0inhk
《图论算法入门:掌握DFS和BFS,理解图与树的遍历》

《图论算法入门:掌握DFS和BFS,理解图与树的遍历》

🎬 博主名称:个人主页 🔥 个人专栏: 《算法通关》,《Java讲解》 ⛺️心简单,世界就简单 目录 序言 DFS 全排列问题 剪枝操作---n皇后问题 BFS 树与图的深度优先遍历 树,图的存储 遍历树,图 树与图的宽度优先遍历 序言 到图论这章节了,先讲讲DFS,BFS,然后讲树和图咋存储,还有树和图的DFS以及BFS, DFS dfs是一个执着的人(可爱捏),他一直搜索到叶子节点,然后才会回头去看别的路,然后继续一条路走到头 从数据结构来看,我们的dfs用的是栈 从空间来看,我们dfs空间使用是与高度成正比的O( h ) 我们dfs搜索是一条路走到头,所以我们dfs不具有最短路的性质 我们来看个最经典的题, 全排列问题 我们从0开始出发,然后往下搜,当搜到n的话就说明我们搜完了输出一下就行(用path记录搜索的路径),当搜完之后,我们肯定要恢复原状,所以把st给回复,path不用是因为,下次直接就覆盖了,不用再path[

By Ne0inhk
【大数据存储与管理】分布式文件系统HDFS:03 HDFS的相关概念

【大数据存储与管理】分布式文件系统HDFS:03 HDFS的相关概念

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈大数据技术原理与应用 ⌋ ⌋ ⌋专栏系统介绍大数据的相关知识,分为大数据基础篇、大数据存储与管理篇、大数据处理与分析篇、大数据应用篇。内容包含大数据概述、大数据处理架构Hadoop、分布式文件系统HDFS、分布式数据库HBase、NoSQL数据库、云数据库、MapReduce、Hadoop再探讨、数据仓库Hive、Spark、流计算、Flink、图计算、数据可视化,以及大数据在互联网领域、生物医学领域的应用和大数据的其他应用。 【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/BigData_principle_application。 文章目录 * 一、块 * 二、名称节点和数据节点 * 三、第二名称节点 * 小结 本文介绍 HDFS 中的相关概念,包括块、名称节点和数据节点、第二名称节点。

By Ne0inhk
《算法题讲解指南:优选算法-模拟》--38.替换所有问号,39.提莫攻击,40.Z 字形变换

《算法题讲解指南:优选算法-模拟》--38.替换所有问号,39.提莫攻击,40.Z 字形变换

🔥小叶-duck:个人主页 ❄️个人专栏:《Data-Structure-Learning》 《C++入门到进阶&自我学习过程记录》《算法题讲解指南》--从优选到贪心 ✨未择之路,不须回头 已择之路,纵是荆棘遍野,亦作花海遨游 目录 38.替换所有问号 题目链接: 题目描述: 题目示例: 解法(模拟): 算法思路: C++算法代码: 算法总结及流程解析: 39.提莫攻击 题目链接: 题目描述: 题目示例: 解法(模拟+分情况讨论): 算法思路: C++算法代码: 算法总结及流程解析: 40.Z 字形变换 题目链接: 题目描述: 题目示例: 解法(模拟+找规律): 算法思路: C+

By Ne0inhk