算法训练(leetcode)第二十八天 | 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

刷题记录

  • 509. 斐波那契数
    • 递归
    • 循环
    • 动态规划
  • 70. 爬楼梯
  • 746. 使用最小花费爬楼梯

509. 斐波那契数

leetcode题目地址

递归

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

// c++
class Solution {
public:int fib(int n) {if(n<2) return n;return fib(n-1) + fib(n-2); }
};

循环

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

//c++
class Solution {
public:int fib(int n) {if(n<2) return n;int a=0, b=1;for(int i=2; i<=n; i++){swap(a, b);b += a;}return b;}
};

动态规划

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

// c++
class Solution {
public:int fib(int n) {if(n<2) return n;vector<int> dp(n+1, 0);dp[1]=1;for(int i=2; i<=n; i++){dp[i] = dp[i-1] + dp[i-2]; }return dp[n];}
};

70. 爬楼梯

leetcode题目地址

本质上还是斐波那契数列。用递归会在45处时间超限。

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

// c++
class Solution {
public:int climbStairs(int n) {if(n<=2) return n;int a=1, b=2;for(int i=3; i<=n; i++){swap(a,b);b+=a;}return b;}
};

746. 使用最小花费爬楼梯

leetcode题目地址

动态规划。使用dp记录到达第i个楼梯所需要花费的费用。起始位置不需要支付费用,而起始位置可以是0和1,因此0、1位置的dp值为0.从2开始计算当前位置所需的最小花费。到达第i层的费用等于到达前一步的最小花费+前一步的花费。具体来说,若前一步是爬1个台阶到达第i层,则第i层的花费为cost[i-1]+dp[i-1];若前一步是爬2个台阶到达第i层,则第i层的花费为cost[i-2]+dp[i-2]。

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

// c++
class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {vector<int> dp(cost.size()+1, 0);for(int i=2; i<=cost.size(); i++){dp[i] = min(cost[i-1]+dp[i-1], cost[i-2]+dp[i-2]);}return dp[cost.size()];}
};

优化空间:上面的代码中起始每次都是只操作前面两个空间,因此只使用两个变量来计算既可。

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

//c++
class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {int a=0, b=0;for(int i=2; i<=cost.size(); i++){int mincost = min(cost[i-1]+b, cost[i-2]+a);a = b;b = mincost;}return b;}
};

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

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

相关文章

Kafka配置SSL信道加密

kafka配置SASL认证 Kafka单机配置SSL认证 使用脚本生成SSL证书 执行ssl.sh # 配置SSL配置文件 cp server.properties ssl.properties# 修改配置文件SSL内容 listenersSSL://kafka-test:9092 advertised.listenersSSL://kafka-test:9092 ssl.keystore.location/root/config/cer…

linux中vim切换输入中文

linux中vim切换输入中文 遇到问题 在虚拟机linux下vim 编辑器中注释的时候无法使用中文 解决方案 Linux系统中的vim编辑器中安装中文输入法软件包 1.在终端中输入以下命令 sudo apt-get install fcitx fcitx-bin fcitx-table-wubi fcitx-table-wbpy2. 安装完成后&#xf…

Zed 编辑器发布了原生 Linux 版本

由 Rust 编写、GPU 加速的 Zed 文本编辑器终于提供了正式的 Linux 原生版本&#xff01;在过去的几个月里&#xff0c;Zed 的 Linux 支持取得了长足的进步&#xff0c;现在已经进入了更正式的阶段。 今天&#xff0c;这款由前 Atom 开发人员创建的现代开源代码编辑器现在在 Li…

vue vite+three在线编辑模型导入导出

文章目录 序一、1.0.0版本1.新增2.编辑3.导出4.导入 二、2.0.0版本1. 修复模型垂直方向放置时 模型会重合4. 修复了导出导入功能 现在是1:1导出导入5. 新增一个地面 视角看不到地下 设置了禁止编辑地面 地面设置为圆形6. 新增功能 可选择基本圆形 方形 圆柱形等模型以及可放置自…

HUGS环境配置

1. 介绍 HUGS: Holistic Urban 3D Scene Understanding via Gaussian Splatting 基于 RGB 图像对城市场景进行整体理解是一个具有挑战性但又很重要的问题。它包括理解几何和外观&#xff0c;以实现新颖的视图合成、解析语义标签和跟踪移动物体。尽管取得了长足的进步&#xf…

C# 的TaskScheduler

在C#中&#xff0c;TaskScheduler 是一个抽象类&#xff0c;用于控制任务的执行方式&#xff0c;特别是它们如何被安排到线程池中的线程上执行。 TaskScheduler 负责将 Task 对象排队并决定何时、以何种方式执行这些任务。 TaskScheduler 的作用 调度任务&#xff1a;将任务…

querylist多线程采集curlMulti时,报错Curl error(60)

前言 在使用querylist多线程采集的时候&#xff0c;报错: Curl error(60)。测试了下用http时没有问题&#xff0c;https时有问题。其原因在于多线程采集库引用的另一个库有问题。需要手动更改。 解决 找到&#xff1a;vendor/ares333/php-curl/src/Curl.php 文件&#xff0c…

网络 闲聊

闲谈 闲话 网络安全——>网络空间安全 网络空间&#xff1a;一个由信息基础设备组成互相依赖的网络 继&#xff1a;海、陆、空、天、的第五大空间 信息安全的一个发展&#xff1a; 通信保密阶段---计算机安全---信息系统安全---网络空间安全 棱镜门事件 棱镜计划&…

Visual Studio Code:深度解析与开发者的新宠

在计算机行业中&#xff0c;开发工具的选择至关重要&#xff0c;它直接影响到开发者的效率和项目的质量。近年来&#xff0c;Visual Studio Code&#xff08;简称VSCode&#xff09;凭借其强大的功能和灵活的定制性&#xff0c;在众多编辑器中脱颖而出&#xff0c;成为了开发者…

linux系统php开机自启动 phpfpm

1、关闭当前的php环境&#xff0c;运行命令&#xff0c;下面二选一&#xff0c;根据你自己情况来选 service php-fpm stop 或 systemctl stop php-fpm 2、运行命令vim /etc/systemd/system/phpfpm.service&#xff0c;输入以下代码,注意php-fpm路径需要改成自己的路径 [Unit]…

Redis原子计数器incr,防止并发请求

一、前言 在一些对高并发请求有限制的系统或者功能里&#xff0c;比如说秒杀活动&#xff0c;或者一些网站返回的当前用户过多&#xff0c;请稍后尝试。这些都是通过对同一时刻请求数量进行了限制&#xff0c;一般用作对后台系统的保护&#xff0c;防止系统因为过大的流量冲击…

Twitter API 使用教程:入门到实践

Twitter API为开发者提供了丰富的接口&#xff0c;用于访问Twitter上的公开数据和实现特定功能。从获取推文到用户认证&#xff0c;Twitter API在数据挖掘、社交分析和应用开发中扮演着重要角色。 关键词 Twitter API, 开发者指南&#xff0c;社交媒体&#xff0c;数据访问 …

elementary os 8 2024年07月新动态

具体信息请登录官网查询 **OS 7更新** Photos 8已经作为Flatpak应用发布到AppCenter。这意味着你可以通过从AppCenter安装Flatpak版本来继续接收Photos的更新&#xff0c;即使在旧版本的elementary OS上&#xff0c;而且Photos现在也很容易为那些运行除elementary OS之外的Lin…

Java中的Set系列集合超详解

Set List是有序集合的根接口&#xff0c;Set是无序集合的根接口&#xff0c;无序也就意味着元素不重复。更严格地说&#xff0c;Set集合不包含一对元素e1和e2 &#xff0c;使得e1.equals(e2) &#xff0c;并且最多一个空元素。   使用Set存储的特点与List相反&#xff1a;元素…

腾讯云如何设置二级域名?

什么是二级域名&#xff1f; 例如我已申请的域名为&#xff1a; test.com //顶级域名 现在我开发的应用要部署到二级域名&#xff1a; blog.test.com 1、打开腾讯云控制台的我的域名&#xff0c;然后点击解析 2、在我的解析页面点击添加记录&#xff0c;然后需注意红色方框处…

生物素标记的柚皮苷探针;Biotin-Naringin

生物素标记的柚皮苷探针&#xff08;Biotin-Naringin&#xff09;是一种结合了生物素&#xff08;Biotin&#xff09;和柚皮苷&#xff08;Naringin&#xff09;特性的化合物&#xff0c;它在有机合成及药物化学技术领域具有重要意义。以下是对该探针的详细解析&#xff1a; 一…

秋招Java后端开发冲刺——Mybatis

一、基本知识 1. 介绍 MyBatis 是 Apache 的一个开源项目&#xff0c;它封装了 JDBC&#xff0c;使开发者只需要关注 SQL 语句本身&#xff0c;而不需要再进行繁琐的 JDBC 编码。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java POJO&#xff08;Plain …

设计模式Base

设计模式是在软件开发过程中总结出来的一些经验&#xff0c;它们大多数都遵循一些基本原则&#xff1a; 单一职责原则&#xff08;SRP&#xff09;&#xff1a;一个类应该只有一个引起它变化的原因。也就是说&#xff0c;一个类应该只有一个职责。开放封闭原则&#xff08;OCP…

Everything搜索无法搜索到桌面的文件(无法检索C盘 或 特定路径的文件)

现象描述 在Everything搜索框中输入桌面已存在的文件或随便已知位置的文件&#xff0c;无法找到。 搜索时检索结果中明显缺少部分磁盘位置的&#xff0c;例如无法检索C盘&#xff0c;任意关键字搜索时结果中没有位于C盘的&#xff0c;无论怎样都搜不到C盘文件。 解决方法 在…

CentOS搭建FTP服务器教程

CentOS搭建FTP服务器教程 在互联网时代&#xff0c;文件传输是日常工作中不可或缺的一部分。FTP&#xff08;文件传输协议&#xff09;作为一种标准的网络协议&#xff0c;被广泛用于在互联网上传输文件。本文将详细介绍如何在CentOS系统上搭建FTP服务器&#xff0c;以便您能轻…