Leetcode 509 斐波那契数

题意理解

        斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。

        其满足递推公式:
                F(0) = 0,F(1) = 1
                F(n) = F(n - 1) + F(n - 2),其中 n > 1

        目标:求第n个斐波那契数是多少?

解题思路

        这道题可以采用动态规划的思路来解决,解决动态规划的题目,一般可以按照五个步骤来分析。

        首先:驱动dp数组就下标的含义:dp[i]表示第i个斐波那契数是dp[i]

        其次:初始化,根据斐波那契数列可知:dp[0]=1, dp[1]=1

        再有:确定递推公式,即斐波那契数的定义:F(n) = F(n - 1) + F(n - 2)

        最后:确定遍历顺序,斐波那契数总是受它前面的连个数影响,所以,我们总是从前往后的顺序遍历。

        最后的一个步骤用于debug,打印dp数组,用于验证思路的正确性。

1.动态规划解题

public int fib(int n) {//定义dp数组int[] dp=new int[n+1];//初始化dp[0]=0;if(n>0) dp[1]=1;//n=0时。//遍历for(int i=2;i<=n;i++){dp[i]=dp[i-1]+dp[i-2];}return dp[n];}

2.存储压缩

之前我们采用dp[]数组来存储,但是实际上,最终的结果只需要一个值。

我们对原来的dp[]数组存储空间进行压缩。sum表示dp0+dp1的和。

在将其不断后移:dp0=dp1,dp1=sum,sum=dp0+dp1, 最终获得第n个斐波那契数由sum返回。

空间复杂度:O(n+1)——>O(3)

public int fib(int n) {//定义dp数组int sum=0;int dp0=0,dp1=1;//初始化if(n==0) return sum;//n=0时。sum=dp0+dp1;//遍历for(int i=2;i<=n;i++){sum=dp0+dp1;dp0=dp1;dp1=sum;}return sum;}

3.分析 

时间复杂度:O(n) 时间耗费在遍历n个斐波那契数

空间复杂度

        O(n):使用dp数组时

        O(1):使用单个值来存储结果时。

n表述出入数字的大小

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

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

相关文章

华为鸿蒙(HarmonyOS)介绍

华为鸿蒙&#xff08;HarmonyOS&#xff09;介绍 华为鸿蒙&#xff08;HarmonyOS&#xff09;是一款由华为自主研发的操作系统&#xff0c;旨在为各种智能设备提供一种统一、高效、安全的解决方案。鸿蒙系统基于微内核架构&#xff0c;可以应用于多种类型的设备&#xff0c;鸿…

服务器感染了.[steloj@mailfence.com].steloj勒索病毒,如何确保数据文件完整恢复?

导言&#xff1a; .steloj勒索病毒&#xff0c;如今已是网络安全领域的一颗新星。这种病毒采用高度复杂的加密算法&#xff0c;将用户文件锁定&#xff0c;迫使受害者支付赎金以获得解密密钥。本文将深入剖析.steloj勒索病毒&#xff0c;使读者对这一威胁有更全面的认识。如不…

快速上手makefile自动化构建工具

makefile自动化构建工具 文章目录 makefile自动化构建工具 makefile背景 简单认识makefile 依赖关系与依赖方法 生成项目 清理项目 ACM时间 语法补充 .PHONY修饰 特殊符号替换 Makefile的推导过程 总结 前言&#xff1a; 在windows下&#xff0c;很多东西都是编译器直接帮你做…

06、docker 安装mysql8

Docker 安装 MySQL8 下载mysql8的镜像 docker pull mysql:8.0.32启动镜像 docker run -p 3307:3306 --name mysql8 -e MYSQL_ROOT_PASSWORD123456 -d mysql:8.0.32配置挂载 创建挂载目录 mkdir -p /docker/mysql8.0.32/copy配置文件到创建的目录下 docker cp mysql:/etc/mysql…

docker学习笔记01-安装docker

1.Docker的概述 用Go语言实现的开源应用项目&#xff08;container&#xff09;&#xff1b;克服操作系统的笨重&#xff1b;快速部署&#xff1b;只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统&#xff1b;Docker通过隔离机制&#xff0c;每个容器间是互相隔离…

计算机基础——原、反、补码与位运算

一、原、反、补码 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的&#xff0c;在计算机用一个数的最高位存放符号, 正数为0, 负数为1。 在介绍位运算符前先了解一下原码、反码和补码。 计算机中的有符号数有三种表示方法&#xff0c;即原码、反码…

Kafka学习笔记1(千峰教育)

Kafka学习笔记1&#xff08;千峰教育&#xff09; 一、为什么使用消息队列1.使用同步的通信方式来解决多个服务之间的通信2.使用异步的通信方式 二、消息队列的流派1.有broker2.无broker 三、Kafka的基本知识1.Kafk2a的安装2.Kafka中的一些基本概念3.创建topic4.发送消息5.消费…

通过讯飞 API 接口用 Vue 实现实时语音转写

通过讯飞 API 接口用 Vue 实现实时语音转写 项目地址 前言 本项目中实时语音能够转写的最大时间为 60 s&#xff0c; 这个数据也是由 API 提供方给限制掉的 为什么我会需要这个点击按钮以后能够实现实时语音的转写呢&#xff0c;因为被课程所迫&#xff0c;选了这个方向就必…

百度每天20%新增代码由AI生成,Comate SaaS服务8000家客户 采纳率超40%

12月28日&#xff0c;由深度学习技术及应用国家工程研究中心主办的WAVE SUMMIT深度学习开发者大会2023在北京召开。百度首席技术官、深度学习技术及应用国家工程研究中心主任王海峰现场公布了飞桨文心五载十届最新生态成果&#xff0c;文心一言最新用户规模破1亿&#xff0c;截…

Leetcode 763 划分字母区间

题意理解&#xff1a; 要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。 注意&#xff0c;划分结果需要满足&#xff1a;将所有划分结果按顺序连接&#xff0c;得到的字符串仍然是 s 。 返回一个表示每个字符串片段的长度的列表。 输入&#xff…

vue解决执行打包之后打开页面空白问题

如果我们在执行了build打包命令之后&#xff0c;打开dist目录下的html文件打开页面空白&#xff0c;有几个常见的问题和解决方法 检查控制台报错&#xff1a; 打开浏览器的开发者工具&#xff0c;查看控制台&#xff08;Console&#xff09;中是否有报错信息。报错信息通常能够…

【头歌实训】kafka-入门篇

文章目录 第1关&#xff1a;kafka - 初体验任务描述相关知识Kafka 简述Kafka 应用场景Kafka 架构组件kafka 常用命令 编程要求测试说明答案代码 第2关&#xff1a;生产者 &#xff08;Producer &#xff09; - 简单模式任务描述相关知识Producer 简单模式Producer 的开发步骤Ka…

JavaScript解构赋值

解构赋值是一种方便的 JavaScript 语法&#xff0c;它允许从数组和对象中快速提取和赋值变量。通过解构赋值&#xff0c;你可以在一个语句中将值从数组或对象中解构出来并赋给多个变量。 数组解构赋值&#xff1a; 数组解构赋值允许你从数组中提取值&#xff0c;并将它们赋给命…

VS Code 运行 Python

介绍 Python&#xff1a; 是一种强大的编程语言&#xff0c;具有广泛的应用领域&#xff0c;可以用于开发 Web 应用、数据分析、人工智能、科学计算等多种领域。 VS Code&#xff1a; 是由微软开发的免费开源代码编辑器&#xff0c;可以在多个平台上运行。具有丰富的扩展功能…

每日一题--------求数字的每⼀位之和

大家好今天的每日一题又来了&#xff0c;有啥不对的请在评论区留言哦 文章目录 目录 文章目录 求数字的每⼀位之和 题⽬描述&#xff1a; 输⼊⼀个整数m&#xff0c;求这个整数m的每⼀位之和&#xff0c;并打印。 一、解题思路 我们可以通过不断获取该整数的个位数&#xff0c…

Python+OpenCV 零基础学习笔记(4-5):计算机图形基础+Python相对文件路径+OpenCV图像+OpenCV视频

文章目录 相关链接运行环境前言计算机图形OpenCV简单使用图形读取文件读取可能会出现的问题&#xff1a;路径不对解决方案其它路径问题解决方案 图像显示保存OpenCV视频视频素材如何获取&#xff1f;简单视频读取 相关链接 【2022B站最好的OpenCV课程推荐】OpenCV从入门到实战 …

python抽象基类之_subclasshook_方法

Python的鸭子特性&#xff08;duck typing&#xff09; Python中自定义的类只要实现了某种特殊的协议&#xff0c;就能赋予那种行为&#xff0c;举一个简单的例子&#xff1a; class A:def __len__(self):return 0 a A() print(len(a)) 如上所示&#xff0c;自己定义了一个类…

Synchronized、ReentrantLock 和 ReadWriteLock底层原理

Synchronized 底层原理 1. JVM 层面的实现 synchronized 是 Java 中的一个关键字&#xff0c;它提供了一种简单的策略来实现线程同步。在 JVM 层面&#xff0c;synchronized 可以依赖于对象内部的监视器锁&#xff08;monitor lock&#xff09;来实现同步。 锁的获取与释放&a…

GB/T 41480-2022 门和卷帘的防烟性能

门和卷帘的防烟是指在指定的试验温度、压差条件下&#xff0c;烟气从一侧泄露到另一侧的烟气泄露速率。 GB/T 41480-2022 门和卷帘的防烟性能样品要求 门或卷帘试件结构为非对称时&#xff0c;应对结构相对薄弱的一面进行测试&#xff0c;其中常温试验测试一个试件&#xff0…

如何购买腾讯云的服务器(详解腾讯云服务器购买流程)

腾讯云服务器购买流程直接在官方秒杀活动上购买比较划算&#xff0c;在云服务器CVM或轻量应用服务器页面自定义购买价格比较贵&#xff0c;但是自定义购买云服务器CPU内存带宽配置选择范围广&#xff0c;活动上购买只能选择固定的活动机&#xff0c;选择范围窄&#xff0c;但是…