算法-动态规划
在牛客网做题时遇到个很简单的题,即求斐波那契(Fibonacci)数列的第n项。我一看,这太简单了, 不就是一个递归解决的事吗。然后。。。就没有然后了。事实证明,这道题用递归算法太浪费资源了,效率也不高。于是 看了下大神代码,说是用动态规划解决,效率之高令我汗颜,因此在网上了解了下动态规划思想。然而我发现这是个挺 复杂的东西,或许是我没弄明白吧,总之今天先记录所得,虽不完整亦为收获。
动态规划
动态算法的核心是记住已经求过的解。而记住已经求过的解有两种方式:自顶向下的备忘录 和自底向上。
自顶向下的备忘录方式也要用到递归,这里暂且不表。重点来谈谈自底向上的方法。
简单来说,自底向上就是先把必定要算出来的子算法先求出来,再通过子算法层层往上。对于Fibonacci数列来说, 求其第n项,那么第n-1项都是必须要求的,而求其第n-1项,第n-2项也是必求的。。。。最底层的就是第0项了.代码如下
public static int fib(int n) { if(n<=0) return n; int []Memo=new int[n+1]; Memo[0]=0; Memo[1]=1; for(int i=2;i<=n;i++) { Memo[i]=Memo[i-1]+Memo[i-2]; } return Memo[n]; }
优化后代码如下
class Solution { public int Fibonacci(int n) { int p = 0; int f = 1; while(n-- != 0){ p += f; f = p - f; } return p; } }
详细内容见HankingHu的博客
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现