(动态规划) 剑指 Offer 10- I. 斐波那契数列 ——【Leetcode每日一题】

news2024/11/16 23:56:15

❓ 剑指 Offer 10- I. 斐波那契数列

难度:简单

写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:

F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.

斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

示例 1:

输入:n = 2
输出:1

示例 2:

输入:n = 5
输出:5

提示

  • 0 <= n <= 100

💡思路:动态规划

如果使用递归求解,会重复计算一些子问题。

  • 例如,计算 f(4) 需要计算 f(3)f(2),计算 f(3) 需要计算 f(2)f(1),可以看到 f(2) 被重复计算了。
    在这里插入图片描述

  • 递归是将一个问题划分成多个子问题求解,动态规划也是如此,

  • 但是 动态规划会把子问题的解缓存起来,从而 避免重复求解子问题

优化

  • 考虑到第 i 项只与第 i-1 和第 i-2 项有关,因此只需要存储前两项的值就能求解第 i 项,从而将空间复杂度由 O(n) 降低为 O(1)

🍁代码:(C++、Java)

C++

class Solution {
public:
    int fib(int n) {
        if(n <= 1) return n;
        vector<int> fib(n + 1);
        fib[1] = 1;
        for(int i = 2; i <= n; i++){
            fib[i] = (fib[i - 1] + fib[i - 2]) % 1000000007;
        }
        return fib[n] ;
    }
};

Java

class Solution {
    public int fib(int n) {
        if(n <= 1) return n;
        int[] fib = new int[n + 1];
        fib[1] = 1;
        for(int i = 2; i <= n; i++){
            fib[i] = (fib[i - 1] + fib[i - 2]) % 1000000007;
        }
        return fib[n] ;
    }
}

优化
C++

class Solution {
public:
    int fib(int n) {
        if(n <= 1) return n;
        int pre1 = 0, pre2 = 1, tmp = 0;
        for(int i = 2; i <= n; i++){
            tmp = (pre1 + pre2) % 1000000007;
            pre1 = pre2;
            pre2 = tmp;
        }
        return tmp;
    }
};

Java

class Solution {
    public int fib(int n) {
        if(n <= 1) return n;
        int pre1 = 0, pre2 = 1, tmp = 0;
        for(int i = 2; i <= n; i++){
            tmp = (pre1 + pre2) % 1000000007;
            pre1 = pre2;
            pre2 = tmp;
        }
        return tmp;
    }
}

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( n ) O(n) O(n)
  • 空间复杂度 O ( 1 ) O(1) O(1)

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!

注: 如有不足,欢迎指正!

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

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

相关文章

基于Python的婴儿用品销售网站SpringBoot+Vue婴幼儿用品商城【源码+lw】

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人七年开发经验&#xff0c;擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等&#xff0c;大家有这一块的问题可以一起交流&#xff01; &#x1f495;&…

基于SSM的疫情核酸结果查询系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

linux 性能分析之内存分析(free,vmstat,top,ps,pmap等工具使用介绍)

引言 学生时代经常听到老师和同学说到学习 linux 的重要性。但是当时看到这个命令行界面就头疼&#xff0c;也就草草地应付学了一下&#xff0c;哎嘛&#xff0c;还是游戏香&#xff01; 但是当前两天自己捣鼓服务器的时候&#xff0c;发现自己部署的一个服务总是崩溃&#x…

使用VisualStudio制作上位机(一)

文章目录 使用VisualStudio制作上位机(一)写在前面第一部分:创建应用程序第二部分:GUI主界面设计使用VisualStudio制作上位机(一) Author:YAL 写在前面 1.达到什么目的呢 本文主要讲怎么通过Visual Studio 制作上位机,全文会以制作过程来介绍怎么做,不会去讲解具体…

一文读懂视频号下载

工具&#xff1a; 移动端抓包工具&#xff08;以Stream为例&#xff09;电脑端浏览器电脑端析包工具&#xff08;以Charles为例&#xff09;【可选项】 一、手机抓包 1 开启Stream 2 抓包 手机进入视频号&#xff0c;通过“搜索“的方式发送get请求&#xff0c;达到抓包的效…

强训第36天

C D C 193--1100 0001 194--1100 0010 196--1100 0100 198--1100 0110 能包括全部的且最小的为 1100 0xxx xxx为主机号&#xff0c;站三位 B MAC地址是绑定网卡的&#xff0c;全球唯一 D A C D IP网段 17为网络号 所以是 40.15.1aaa aaa(7位主机号).0 因为要划分2个子网 所以…

jmeter接口测试详解

前言 今天笔者呢&#xff0c;想给大家聊聊Jmeter接口测试流程详解&#xff0c;废话不多说直接进入正题。 同时&#xff0c;我也准备了一份自动化测试视频教程&#xff0c;需要的可以直接在下方观看&#xff0c;你也直接点击文末小卡片免费领取资料文档 视频教程观看处&#…

【赠书活动|第六期《强化学习:原理与Python实战》】

文章目录 RLHF是什么&#xff1f;RLHF适用于哪些任务&#xff1f;RLHF和其他构建奖励模型的方法相比有何优劣&#xff1f;什么样的人类反馈才是好的反馈RLHF算法有哪些类别&#xff0c;各有什么优缺点&#xff1f;RLHF采用人类反馈会带来哪些局限&#xff1f;如何降低人类反馈带…

C语言编写图形界面

文章目录 环境使用库基础概念句柄 程序的入口创建窗口定义窗口类注册窗口类创建窗口 完整代码运行效果 环境 使用的是VSCode MinGW&#xff1b; 使用库 我们使用windows.h库来实现图形化界面。 头文件如下&#xff1a; #include <windows.h>windows.h是 Windows 操作…

多维时序 | MATLAB实现SCNGO-BiGRU-Attention多变量时间序列预测

多维时序 | MATLAB实现SCNGO-BiGRU-Attention多变量时间序列预测 目录 多维时序 | MATLAB实现SCNGO-BiGRU-Attention多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 多维时序 | MATLAB实现SCNGO-BiGRU-Attention多变量时间序列预测。 模型描述…

第三届人工智能与智能制造国际研讨会(AIIM 2023)

第三届人工智能与智能制造国际研讨会&#xff08;AIIM 2023&#xff09; The 3rd International Symposium on Artificial Intelligence and Intelligent Manufacturing 第三届人工智能与智能制造国际研讨会&#xff08;AIIM 2023&#xff09;将于2023年10月27-29日在成都召开…

GEE-PIE遥感大数据处理与典型案例实践技术应用

随着航空、航天、近地空间等多个遥感平台的不断发展&#xff0c;近年来遥感技术突飞猛进。由此&#xff0c;遥感数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量也大幅增长&#xff0c;使其越来越具有大数据特征。对于相关研究而言&#xff0c;遥感大数据的出现为其提…

item_search_img-按图搜索淘宝商品(拍立淘)

一、接口参数说明&#xff1a; item_search_img-按图搜索淘宝商品&#xff08;拍立淘&#xff09;&#xff0c;点击更多API调试&#xff0c;请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_search_img 名称类型必须描…

Ohio主题 - 创意组合和代理机构WordPress主题

Ohio主题是一个精心制作的多用途、简约、华丽、多功能的组合和创意展示主题&#xff0c;具有敏锐的用户体验&#xff0c;您需要构建一个现代且实用的网站&#xff0c;并开始销售您的产品和服务。它配备了最流行的WordPress页面构建器 WPBakery Page Builder&#xff08;以前称为…

三分钟解决AE缓存预览渲染错误、暂停、卡顿问题

一、清除RAM缓存&#xff08;内存&#xff09; 你应该做的第一件事是清除你的RAM。这将清除当前存储在内存中的所有临时缓存文件。要执行此操作&#xff0c;请导航到编辑>清除>所有内存。这将从头开始重置RAM缓存 二、清空磁盘缓存 您也可以尝试清空磁盘缓存。执行此操作…

渗透测试流程(含思维导图)

思维导图&#xff08;总纲&#xff09; 范围界定 在开始技术性安全评估之间&#xff0c;务必要观察、研究目标环境的被测范围。同时还要了解&#xff0c;这个范围牵扯多少个单位&#xff0c;是单个单位还是多个单位会参与到安全评估的工作中来&#xff0c;在范围界定阶段&#…

中国省域-经济高质量发展水平2000-2021年(数据+dofile+综合指数)

以中国31个省级行政单位&#xff08;不含港澳台&#xff09;为研究对象&#xff0c;测度中国省域经济高质量发展 中国省域经济高质量发展测度结果&#xff0c; 有助于分析各地区经济高质量发展的优势和短板&#xff0c; 为改善地区经济高质量发展提供参考价值 一、数据介绍 数…

乐鑫推出 ESP ZeroCode 控制台

乐鑫科技 ESP ZeroCode 控制台是一个网页应用&#xff0c;用户只需点击鼠标&#xff0c;描述想要创建的产品类型、功能及其硬件配置&#xff0c;即可按照自身需求&#xff0c;快速生成符合 Matter 认证的固件&#xff0c;并在硬件上进行试用。试用过程中&#xff0c;如有任何不…

C++11 新特性 ---- noexcept

1. 异常 异常通常用于处理逻辑上可能发生的错误 在C98中&#xff0c;提供了一套完善的异常处理机制&#xff0c;直接在程序中将各种类型的异常抛出&#xff0c;从而强制终止程序的运行。 1.1 基本语法 当函数抛出异常时&#xff0c;程序会停止执行&#xff0c;并显示异常信息…

【已解决】记 Vue3+SpringBoot 前后端分离项目部署时的一次跨域问题

问题背景是在一次部署开发环境时&#xff0c;由于是前后端分离项目&#xff08;前端Vue3&#xff0c;后端SpringBoot&#xff09;&#xff0c;SpringBoot 使用 Docker 部署&#xff0c;前端访问服务接口时出现跨域问题。 不知道什么是跨域问题的小伙伴可以查看另一篇文章&…