0119 动态规划 Day8

news2024/11/17 3:38:00

剑指 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

class Solution {
    public int fib(int n) {

    }
}

解题思路

动态规划解析:
状态定义: 设 dp 为一维数组,其中 dp[i] 的值代表 斐波那契数列第 i 个数字 。
转移方程: dp[i + 1] = dp[i] + dp[i - 1] ,即对应数列定义 f(n + 1) = f(n) + f(n - 1) ;
初始状态: dp[0] = 0, dp[1] = 1,即初始化前两个数字;
返回值: dp[n] ,即斐波那契数列的第 n 个数字。

循环求余法:
大数越界: 随着 n 增大, f(n) 会超过 Int32 甚至 Int64 的取值范围,导致最终的返回值错误。

求余运算规则: 设正整数 x, y, p ,求余符号为 ⊙,则有 (x + y) ⊙p = (x ⊙ p + y⊙ p) ⊙ p

解析: 根据以上规则,可推出 f(n) ⊙p = [f(n-1)⊙ p + f(n-2) ⊙ p]⊙p,从而可以在循环过程中每次计算 sum = (a + b)⊙1000000007,此操作与最终返回前取余等价。

 

 

 

 

 

 

 

 

 

 

代码如下

class Solution {
    public int fib(int n) {
        int a = 0, b = 1, sum;
        for(int i = 0; i < n; i++){
            sum = (a + b) % 1000000007;
            a = b;
            b = sum;
        }
        return a;
    }
}

剑指 Offer 10- II. 青蛙跳台阶问题 

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。

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

示例 1:

输入:n = 2
输出:2
示例 2:

输入:n = 7
输出:21
示例 3:

输入:n = 0
输出:1

class Solution {
    public int numWays(int n) {

    }
}

解题思路 

设跳上 n 级台阶有f(n) 种跳法。在所有跳法中,青蛙的最后一步只有两种情况: 跳上 1 级或 2 级台阶。

当为 1 级台阶: 剩 n−1 个台阶,此情况共有 f(n−1) 种跳法;
当为 2级台阶: 剩 n-2个台阶,此情况共有f(n−2) 种跳法。


即 f(n) 为以上两种情况之和,即 f(n)=f(n-1)+f(n-2) ,以上递推性质为斐波那契数列。因此,本题可转化为 求斐波那契数列第 n 项的值 ,与 斐波那契数列 等价,唯一的不同在于起始数字不同。

代码如下

class Solution {
    public int numWays(int n) {
        int a = 1, b = 1, sum;
        for(int i = 0; i < n; i++){
            sum = (a + b) % 1000000007;
            a = b;
            b = sum;
        }
        return a;
    }
}

剑指 Offer 63. 股票的最大利润

假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?

示例 1:

输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。

注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。


示例 2:

输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。

class Solution {
    public int maxProfit(int[] prices) {

    }
}

解题思路

动态规划解析:


状态定义: 设动态规划列表 dp ,dp[i] 代表以prices[i] 为结尾的子数组的最大利润(以下简称为 前 i日的最大利润 )。


转移方程: 由于题目限定 “买卖该股票一次” ,因此前 i 日最大利润 dp[i] 等于前 i - 1日最大利润 dp[i−1] 和第 i 日卖出的最大利润中的最大值。
dp[i] = max(dp[i - 1], prices[i] - min(prices[0:i]))

即前i日最大利润=max(前(i−1)日最大利润,第i日价格−前i日最低价格)

初始状态: dp[0] = 0 ,即首日利润为 0 ;
返回值: dp[n - 1],其中 n为 dp列表长度。

 

 

 

 

 

 

 

代码如下

class Solution {
    public int maxProfit(int[] prices) {
        int cost = Integer.MAX_VALUE, profit = 0;
        for(int price : prices) {
            cost = Math.min(cost, price);
            profit = Math.max(profit, price - cost);
        }
        return profit;
    }
}

 

 

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

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

相关文章

计算机的硬件系统和软件系统的关系

计算机的硬件系统和软件系统的关系是缺一不可。 硬件它是所有软件运行的物质基础。 与硬件直接接触的是操作系统&#xff0c;它处在硬件和其他软件之间&#xff0c;表示它向下控制硬件&#xff0c;向上支持其他软件。 在操作系统之外的各层分别是各种语言处理程序、数据库管理…

CleanMyMacX4.12.1Crack版本频繁弹密码 菜单浮窗无法显示显示空白解决办法

你们有没有出现过在使用 CleanMyMac 清理系统垃圾文件的时候会频繁弹出输入开机密码&#xff1f;那么该如何解决这个问题呢&#xff1f;跟着小编来看看解决方法吧&#xff01; 频繁输入密码 更新CleanMyMacX到4.12.1的Crack版本之后&#xff0c;发现做一些操作要一直输入密码&…

科技云报道:PingCAP黄东旭:Serverless是数据库的未来形态

科技云报道原创。 30年前&#xff0c;程序员要想写代码&#xff0c;必须使用复杂的汇编语言。 但在今天&#xff0c;几乎没有程序员知道如何使用汇编语言&#xff0c;更加简易的高级语言如C&#xff0c;C#&#xff0c;JAVA&#xff0c;Rust&#xff0c;Go已成为开发主流。 随…

分布式文件存储系统FastDFS[3]-通过Docker安装并且从客户端进行上传下载测试

一、FastDFS安装 FastDFS的安装我们还是通过Docker来安装实现吧&#xff0c;直接在Linux上还装还是比较繁琐的&#xff0c;但就学习而言Docker安装还是非常高效的。Docker环境请自行安装哦&#xff0c;不清楚的可以看看我的Docker专题的内容。https://blog.csdn.net/qq_3852657…

【jenkins】1. 安装jenkins (docker-compose)

环境 ubuntu 20docker服务器 ip:xxx.xxx.xxx.xxx 步骤 1. 【编写安装文件】windows下 - 编写 docker-compose.yaml version: "3.1" services:jenkins:image: jenkins/jenkinsrestart: alwayscontainer_name: jenkinsports:- 58080:8080- 50000:50000volumes:- ./…

5.31 综合案例2.0 - 在线MP3音乐播放器

综合案例2.0 - 在线MP3音乐播放器一、案例说明二、准备器件三、案例连线四、代码代码说明复制五、测试一、案例说明 本案例制作一个联网下载声音文件的MP3播放器。 案例功能说明&#xff1a; 案例使用一块IC035串口屏和两个按键通过按键可以切换音乐&#xff0c;下载播放或删除…

瑜岿科技综合能源管理系统助力企业节能降耗工作

能源是国民经济的基础&#xff0c;更是城市赖以发展的动力。优化能源结构、大力发展可再生能源、提高机房能效、实现建筑智慧节能是行业绿色发展重点。在国家碳达峰碳中和的重大战略决策背景下&#xff0c;我国能源体制改革深入推进&#xff0c;能源生产和消费发生重大变革&…

如今社交电商不可忽略的一个点——消费增值

消费增值是一个基于消费返利理论的全新商业消费生态&#xff0c;一个让用户从优惠消费—免单消费—挣钱消费&#xff0c;所突破的新消费、新业态模式—增值消费&#xff0c;一个从电商化的平台走向品牌化的平台&#xff0c;让平台脱离单打独斗的方式&#xff0c;通过商家联盟方…

编译原理 2 - 词法分析

第3章 词法分析3.1 词法分析器的功能和结构3.2 状态转换图3.3 正则文法 和 正则表达式3.4 有限自动机 DFA与NFA测试第3章 词法分析 重点&#xff1a;① 词法分析器的输入、输出&#xff1b;② 用于识别符号的状态转移图的构造&#xff1b;③ 根据状态转移图实现词法分析器 难点…

【MATLAB教程案例55】GoogleNet网络的MATLAB编程学习和实现,以步态识别为例进行仿真分析

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 1.软件版本 2.GoogleNet理论概述

基于Qt的桌面客户端组件化框架DT 开源啦

这个是本人在工作中基于QT开发的组件化桌面开发框架&#xff0c;目前打算开源出来提供给大家&#xff0c;节省大家的开发时间和效率&#xff0c;希望对大家的开发有所帮助&#xff0c;也欢迎提出意见和改进建议 1. 为什么开源DT框架 DT框架&#xff0c;本身就是基于QT为基础搭…

深度学习——含并行连接的网络(GoogLeNet)笔记

GoogLeNet中基本的卷积块是Inception块。 1.Inception块&#xff1a;4个路径从不同的层面抽取信息&#xff0c;然后在输出通道合并 ①1*1的卷积层&#xff0c;减少通道数&#xff0c;降低模型的复杂度 ② 1*1的卷积层&#xff0c;减少通道数&#xff0c;降低模型复杂度。然后…

volatile关键字和synchronized关键字

参考博客&#xff1a;https://www.cnblogs.com/cg-ww/p/14540450.html 1、volatile的作用&#xff1a;关键作用是使变量在多个线程之间可见 程序并没有因为我修改之后结束运行&#xff0c;因为线程对共享变量具有不可见性&#xff0c;main线程修改布尔值之后&#xff0c;子线…

【读点论文】MicroNet: Towards Image Recognition with Extremely Low FLOPs,在极高限制下的轻量化网络

MicroNet: Towards Image Recognition with Extremely Low FLOPs Abstract 这篇论文旨在以极低的计算成本解决性能大幅下降的问题。提出了微分解卷积&#xff0c;将卷积矩阵分解为低秩矩阵&#xff0c;将稀疏连接整合到卷积中。 提出了一个新的动态激活函数-- Dynamic Shift …

精准管控 | AIRIOT数字油库智能化解决方案

在油库管理的过程中&#xff0c;储油罐区普遍存在分布空间范围广、安全防爆要求高、监控点多、布线复杂、自动化系统集成难度大等问题&#xff0c;传统的油库管理手段相对落后、管理环境复杂&#xff0c;企业在监测监控、设备设施管理、日常运行等方面存在诸多难点&#xff1a;…

Openldap2.5.13编译安装

Openldap2.5.13编译安装 本篇文章没有很全面&#xff0c;采用的是编译安装&#xff0c;yum安装参考我的另外一篇文章 一、准备 openssl-1.1.1.tar.gz 下载地址&#xff1a;https://ftp.openssl.org/source/old/1.1.1/openssl-1.1.1.tar.gz openldap-2.5.13.tgz 下载地址&#…

APS计划排产软件在仪器仪表行业的应用

仪器仪表是指用以产生、测量精密量的设备和装置&#xff0c;包括对精密量的观察、监视、测定、验证、记录、传输、变换、显示、分析处理与控制。仪器仪表是仪器仪表的一个重要分支。伴随国家出台政策大力发展精密仪器仪表下游行业&#xff0c;下游应用领域对精密仪器仪表的需求…

React 学习笔记:组件生命周期

组件生命周期 生命周期一个事物从创建到最后消亡经历的过程&#xff0c;在这个过程中会有不同的状态&#xff08;新生儿、少年&#xff09;&#xff0c;所以在 16.8 版本以前生命周期只有类组件才有&#xff0c;函数组件是没有这个概念的&#xff0c;因为它没有状态&#xff0…

Diffusion-LM Improves Controllable Text Generation 扩散语言模型改善可控文本生成

论文链接&#xff1a;https://arxiv.org/abs/2205.14217 代码链接&#xff1a;https://github.com/XiangLi1999/Diffusion-LM 一、简介 无需重训模型控制语言模型的表现是自然语言生成&#xff08;NLG&#xff09;的一个重要开放问题&#xff0c;近期工作已经在简单句子属性控…

解读小红书2022年母婴行业报告:心智种草的流量密码

母婴用户代际更迭&#xff0c;90后晋升为母婴消费主力军。新一代宝爸宝妈的关注点在哪里&#xff1f;品牌该如何通过小红书满足ta们的进阶需求&#xff0c;为母婴消费注入新活力&#xff1f; 本文将解读小红书官方发布的《2022年母婴行业人群洞察报告》&#xff0c;基于上千名用…