java数据结构与算法刷题-----LeetCode509. 斐波那契数

news2024/12/28 17:39:05
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846

很多人觉得动态规划很难,但它就是固定套路而已。其实动态规划只不过是将多余的步骤,提前放到dp数组中(就是一个数组,只不过大家都叫它dp),达到空间换时间的效果。它仅仅只是一种优化思路,因此它目前的境地和线性代数一样----虚假的难。

  1. 想想线性代数,在国外留学的学生大多数不觉得线性代数难理解。但是中国的学生学习线性代数时,完全摸不着头脑,一上来就是行列式和矩阵,根本不知道这玩意是干嘛的。
  2. 线性代数从根本上是在空间上研究向量,抽象上研究线性关系的学科。人家国外的教科书都是第一讲就帮助大家理解研究向量和线性关系。
  3. 反观国内的教材,直接把行列式搞到第一章。搞的国内的学生在学习线性代数的时候,只会觉得一知半解,觉得麻烦,完全不知道这玩意学来干什么。当苦尽甘来终于理解线性代数时干什么的时候,发现人家国外的教材第一节就把这玩意讲清楚了。你只会大骂我们国内这些教材,什么狗东西(以上是自己学完线性代数后的吐槽,我们同学无一例外都这么觉得)。

而我想告诉你,动态规划和线性代数一样,我学完了才知道,它不过就是研究空间换时间,提前将固定的重复操作规划到dp数组中,而不用暴力求解,从而让效率极大提升。

  1. 但是网上教动态规划的兄弟们,你直接给一个动态方程是怎么回事?和线性代数,一上来就教行列式和矩阵一样,纯属恶心人。我差不多做了30多道动态规划题目,才理解,动态方程只是一个步骤而已,而这已经浪费我很长时间了,我每道题都一知半解不理解,过程及其痛苦。最后只能重新做。
  2. 动态规划,一定是优先考虑重复操作与dp数组之间的关系,搞清楚后,再提出动态方程。而你们前面步骤省略了不讲,一上来给个方程,不是纯属扯淡吗?
  3. 我推荐研究动态规划题目,按5个步骤,从上到下依次来分析
  1. DP数组及下标含义
  2. 递推公式
  3. dp数组初始化
  4. 数组遍历顺序(双重循环及以上时,才考虑)
  5. dp数组打印,分析思路是否正确(相当于做完题,检查一下)

在这里插入图片描述

什么是斐波那契数列?
  1. 斐波那契数列:第一个值是0,第二个值是1,剩下的元素是它前两个元素和,例如:0 1 1 2 3 5… , 可见除了最开始的两个固定为0和1外,其余每一个元素都是前两个元素的和。
  2. 也就是说,这玩意一看就是固定的一套值,如果每次都重新生成,就太暴力了。
  3. 动态规划的思想就是,将生成的过程,就生成一次,之后再用,直接从dp数组中拿。从而大大提升效率
解题思路
  1. 暴力求解的思想,就是定义3个或者2个变量,然后累加,以获得指定位置的斐波那契数。每次都需要从头开始累加
  2. 但是如果我们预先将其存储到dp数组,就可以直接通过dp[x], 获取dp数组中指定位置x的对应斐波那契数,而不用每次都从头计算。
动态规划思考5步曲
  1. DP数组及下标含义

DP数组存储斐波那契数列,这个数列是一维线性的,所以只需一维数组存储。下标代表斐波那契数的位置。dp[0] = 0,dp[1] = 1是头两个固定值,dp[2]开始,每个元素是前两个数组元素的和。即可生成对应斐波那契数列的dp数组。

  1. 递推公式

既然知道了DP数组就是存储的斐波那契数列,那么递推公式,很显然就是当前元素=前两个元素的和。F(n) = F(n-1)+F(n-2)。 而且F(0) = 0,F(1)=1,这是斐波那契数列的特性,前两个值固定为0和1.

  1. dp数组初始化

在这里插入图片描述

  1. 数组遍历顺序(因为斐波那契数列是一维的,只需要一重循环,无需考虑这个)
  2. 打印dp数组(自己生成dp数组后,将dp数组输出看看,是否和自己预想的一样。)

在这里插入图片描述

代码

在这里插入图片描述

class Solution {
    public int fib(int n) {
        int length = n>=1?n:1;//避免n给的太小,例如n = 0时,dp[1] = 1;这条代码会下标越界
        //初始化DP数组,一维数组即可,头两个元素固定为0和1
        int dp[] = new int[length+1]; dp[0] = 0; dp[1] = 1;
        //其余元素为它的前两个元素的和
        for(int i = 2;i<=n ; i++){
            dp[i] = dp[i-1]+dp[i-2];
        }
        return dp[n];
    }
}

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

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

相关文章

跨境电商独立站代采1688货源网站

什么是淘宝代购 淘宝代购是近年兴起的一种购物模式&#xff0c;是帮国外客户购买中国商品。主要是通过万邦 科技的外贸代购系统&#xff0c;把淘宝、天猫等电商平台的全站商品通过API 接入到你的网站 上&#xff0c;瞬间就可以架设一个有数亿产品的大型网上商城&#xff0c;而且…

外贸人应该顺应趋势做外贸

2024年&#xff0c;有人疑惑外贸将如何发展&#xff1f;我想紧跟趋势是不会出错的&#xff0c;多年前网络没有如今那么发达&#xff0c;客户到中国参展或者来访就能确认订单。如今到处都是各种推广平台&#xff0c;客户足不出户就能在线上订购产品&#xff0c;如果你还是想靠之…

出版实务 | 书刊整体设计

文章目录 书刊整体设计概念目的原则内容外部装帧设计内文版式设计 书刊的形态术语书刊外表的翻本形态书刊的开本书刊装订样式种类平装精装骑马订装散页装 书刊的结构部件图书封面勒口书名页目录页 期刊面封底封 书刊版式设计概述版心、周空、版口、翻口的概念版面类型——和合面…

STM32CubeMX教程11 RTC 实时时钟 - 入侵检测和时间戳

目录 1、准备材料 2、实验目标 3、实验流程 3.0、前提知识 3.1、CubeMX相关配置 3.1.1、时钟树配置 3.1.2、外设参数配置 3.1.3、外设中断配置 3.2、生成代码 3.2.1、外设初始化调用流程 3.2.2、外设中断调用流程 3.2.3、添加其他必要代码 4、常用函数 5、烧录验…

英伟达「摊牌」,朋友变对手

对于曾经拿着英伟达的GPU进行自动驾驶系统开发的初创公司来说&#xff0c;可能未必会想到&#xff1a;某一天&#xff0c;这家全球GPU巨头&#xff0c;曾经的合作伙伴会成为自己的直接竞争对手。 上周&#xff0c;英伟达官方公众号发布招聘消息&#xff0c;公司正在扩大其自动驾…

实验4.4 动态路由OSPF协议的配置

实验4.4 动态路由OSPF协议的配置 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施1.配置交换机和路由器的接口的IP地址等参数。2.配置动态路由OSPF协议&#xff0c;实现全网互通。 六、任务验收七、任务小结八、知识链接1&#xff0e;OSPF协议概念2&#xff0e;…

网络安全-真实ip获取伪造与隐藏挖掘

目录 真实ip获取应用层网络层网络连接TOAproxy protocol ip伪造应用层网络层TOA攻击proxy protocol 隐藏代理 挖掘代理多地ping历史DNS解析记录国外主机解析域名网站RSS订阅网络空间搜索引擎 总结参考 本篇文章学习一下如何服务如何获取真实ip&#xff0c;隐藏自己的ip&#xf…

Http状态:net::ERR_INCOMPLETE_CHUNKED_ENCODING

一、问题描述&#xff1a; 今天前端的小伙伴遇到一个js文件加载报错&#xff1a;net::ERR_INCOMPLETE_CHUNKED_ENCODING&#xff0c;不论如何刷新页面始终只有该文件加载失败&#xff0c;Chrome开发者工具中响应内容显示此请求没有可用的响应数据。 二、原因调查 排除非前端发…

RabbitMQ(七)ACK 消息确认机制

目录 一、简介1.1 背景1.2 定义1.3 如何查看确认/未确认的消息数&#xff1f; 二、消息确认机制的分类2.1 消息发送确认1&#xff09;ConfirmCallback方法2&#xff09;ReturnCallback方法3&#xff09;代码实现方式一&#xff1a;统一配置a.配置类a.生产者c.消费者d.测试结果 …

Linux------mv命令超详解(狠狠爱住)

mv 命令用于移动文件或目录&#xff0c;也可以用来重命名文件或目录。 基本语法&#xff1a; mv [选项] 源文件 目标文件 常用选项&#xff1a; -i 或 --interactive&#xff1a;交互式地移动文件&#xff0c;如果目标文件已经存在&#xff0c;则会询问是否覆盖。-u 或 --…

网络安全卷么?

官方一直宣传网络安全是朝阳行业&#xff0c;每年缺少大几百万人才&#xff0c;民间网络安全公司生存堪忧&#xff0c;只能靠各种低价冲标&#xff0c;安全技术也是各种卷。你身边的网络安全人过的怎么样呢&#xff1f; 官方宣传的是对的网络安全现在是朝阳行业&#xff0c;缺口…

Apache POI 操作Excel表格

1、Apache POI介绍 Apache POI 是一个处理Miscrosoft Office文件格式的开源项目&#xff0c;在Java中可以用来对Miscrosoft Office的各种文件进行读写操作&#xff0c;本文是介绍Apache POI操作Excel的基础案例。 2、Apache POI操作Excel 引入pom依赖 <!--excel POI依赖…

电源模块电阻测试:万用表如何测量电源的电阻?

电阻是电路中常用的电子元件&#xff0c;它可以调节电压、限制电流&#xff0c;从而保护电路。电阻测试是电源模块的常规测试项目之一&#xff0c;常见的电阻测试方法是通过万用表来测量电阻阻值&#xff0c;具体如下&#xff1a; 一、两线法 适用于测量较大的电阻值&#xff0…

如何快速搭建自己的外贸/跨境电商独立站?

外贸老鸟一定听过行业内某些大神通过运营外贸独立站获得成百上千封的询盘&#xff0c;看到别人每天询盘接到手软常常羡慕不已&#xff0c;再回头看看自己的网站&#xff0c;一年到头也收不到几个询盘。等到终于抽出时间下定决心要打造自己的外贸独立站接单平台&#xff0c;又常…

逻辑卷学习后续----------缩容

一、缩容&#xff1a;缩减大小 ext4可以 &#xff0c; xfs无法缩减&#xff0c;缩减会影响业务 1.解挂载 2.检查文件系统完整性 3.缩减文件系统 4.缩减逻辑卷上下一致 5.再挂载回去 添加磁盘 文件系统只能装ext4 缩减文件系统 resize2fs 挂载失败需要重新安装文件系统…

电商数据公司的卓越之路:优秀特质与优质服务的探索

在数字化浪潮中&#xff0c;电商数据公司作为行业变革的驱动者&#xff0c;正发挥着越来越重要的作用。这些公司通过收集、分析和利用海量数据&#xff0c;为电商企业提供决策支持、市场洞察和个性化服务。然而&#xff0c;要在竞争激烈的市场中脱颖而出&#xff0c;一家优秀的…

两种差价,昂首资本一分钟讲清楚

在交易中各位投资者都知道交易中能盈利就是做到了低买高卖&#xff0c;但是其中差价又是能影响盈利多少的因素&#xff0c;今天昂首资本就一分钟讲清楚两种差价&#xff0c;其中一种很多投资者根本就没有听说过&#xff0c;更别说使用了。 其实谈起外汇差价&#xff0c;昂首资…

2024最新阿里云服务器优惠活动大全_特价活动清单

2024年阿里云服务器优惠活动大全&#xff0c;阿里云2核2G服务器ECS经济型e实例、3M固定带宽、40G ESSD Entry云盘&#xff0c;99元一年&#xff0c;续费和不涨价也是99元&#xff0c;新老用户均可以买。阿里云轻量应用服务器2核2G3M带宽优惠价格61元一年&#xff0c;云服务器吧…

2024全栈软件测试工程师,“我“的测试该如何走...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、什么是全栈测试…

Cypress安装与使用教程(3)—— 软测大玩家

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…