【Leetcode 剑指Offer】第 8 天 动态规划(简单)

news2024/12/26 22:03:39

动规

    • 剑指 Offer 10- I. 斐波那契数列
      • 动态规划
      • 动态规划的优化【两种赋值】
    • 剑指 Offer 10- II. 青蛙跳台阶问题
    • 剑指 Offer 63. 股票的最大利润
      • 考虑效率优化【时间+空间】
      • python初始化无穷大或无穷小值

写在前面:
动规分析必备:状态定义、状态转移方程、初始状态和返回值
考虑动规的优化:在第i项只与少数项有关时,用少数几个变量代替可降低复杂度。

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

动态规划

状态定义:dp[i]表示第 i 项的斐波那契数列。
状态转移:dp[i] = dp[i - 1] + dp[i -2],题目已经给了。
初始值:dp[0] = 0, dp[1] = 1。
返回值:dp[n]。

class Solution:
    def fib(self, n: int) -> int:
        dp=[]
        dp.append(0)
        dp.append(1)
        for i in range(2,n+1):
            dp.append((dp[i-1]+dp[i-2])%1000000007)
        return dp[n]%1000000007

时间复杂度:O(n),遍历一次。
空间复杂度:O(n),dp 数组需要占用 O(n)O(n)O(n) 的额外空间。

动态规划的优化【两种赋值】

所谓动态规划的优化,就是找状态转移的过程中第 i 项到底跟哪些项有关,如果关联的项比较少的话,就可以使用少数的几个变量代替,比如这题中 i 的状态只与 i - 1 和 i - 2 有关,所以,我们只需要声明 3 个变量轮动就可以了。

class Solution:
    def fib(self, n: int) -> int:      
        #2)dp优化
        if n<=1:return n
        a,b=0,1
        for i in range(2,n+1):
            tmp=b
            b=(a+b)%1000000007
            a=tmp
        return b

在这里插入图片描述
另一种赋值方式不同:

#3)dp优化
        if n<=1:return n
        a,b=0,1
        for i in range(2,n+1):
            tmp=(a+b)%1000000007
            a=b
            b=tmp
        return tmp

在这里插入图片描述

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

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

跟前面一题不同的就是dp[0]=1,其余一样的

class Solution:
    def numWays(self, n: int) -> int:
        dp=[]
        dp.append(1)
        dp.append(1)
        for i in range(2,n+1):
            dp.append((dp[i-1]+dp[i-2])%1000000007)
        return dp[n]

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

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

示例 1:
输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。

直接参考题解吧QAQ: 股票的最大利润(动态规划,清晰图解)在这里插入图片描述

考虑效率优化【时间+空间】

在这里插入图片描述

Q:dp[i]跟dp[i-1]有关,为什么用一个变量profit代替整个dp数组哇?!(不懂,动规好难)

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        cost, profit = float("+inf"), 0
        for price in prices:
            cost = min(cost, price)
            profit = max(profit, price - cost)
        return profit

python初始化无穷大或无穷小值

float(“INF”)表示为正无穷; float(“-INF”)表示负无穷

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

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

相关文章

Vue3 + setup + ts 使用总结

阅读vue的英文官网 中文的vue官网比vue的英文官网差很多&#xff0c;这个其实很容易理解&#xff0c;毕竟vue是服务于全球的开源项目之一。 所以程序员的第一生产力还是英语 不管学什么都要去获取第一手资料&#xff0c;不要看中文官网&#xff0c;直接去看英文官网 vite初…

微服务架构简介

微服务 软件架构是一个包含各种组织的系统组织&#xff0c;这些组件包括 Web服务器, 应用服务器, 数据库,存储, 通讯层), 它们彼此或和环境存在关系。系统架构的目标是解决利益相关者的关注点。 image Conway’s law: Organizations which design systems[...] are constrained…

jenkins集成tapd插件

文章目录1. 在tapd上关联jenkins1.1 公司管理员登录tapd&#xff0c;进入设置—开发集成—服务集成1.2 下载插件&#xff0c;并在jenkins上安装。2. 在tapd上关联jenkins在jenkins配置tapd插件2.1 生成Jenkins API Token3. 进入某个项目&#xff0c;启用流水线并配置3.1 选择je…

第二章 opengl实现三角形

OpenGL三角形关注参数图形渲染管线顶点输入顶点着色器编译着色器片段着色器着色器程序链接顶点属性元素缓冲对象三角形关注参数 顶点数组对象&#xff1a;Vertex Array Object&#xff0c;VAO 顶点缓冲对象&#xff1a;Vertex Buffer Object&#xff0c;VBO 元素缓冲对象&…

Windows10下使用Intel SGX功能(二):helloworld流程分析

文章目录参考文献helloworld 代码解读代码目录结构调用流程1. 首先定义 host 和 enclave 之间相互调用的函数2. 实现 enclave 端的 enclave_helloworld() 逻辑3. 实现 host 端的 host_helloworld() 逻辑4. 编译 enclave 应用程序4.1 使用 oeedger8r 编译 helloworld.edl 的 unt…

学生专用台灯怎么选?给孩子买台灯需要注意什么

台灯是现在很多学生孩子都使用比较多的产品&#xff0c;晚上看书学习&#xff0c;停笔沉思&#xff0c;台灯柔和舒适的光照&#xff0c;可以营造良好的氛围&#xff0c;也能有效保护眼睛&#xff0c;不受光线刺激、辐射伤害。 那么学生专用台灯该怎么选呢&#xff1f; ①一个…

捍宇医疗再冲刺科创板上市:核心产品专利来自购买,暂未商业化

2023年3月1日&#xff0c;上海捍宇医疗科技股份有限公司&#xff08;下称“捍宇医疗”&#xff09;递交招股书&#xff0c;准备在科创板上市。据贝多财经了解&#xff0c;捍宇医疗曾冲刺港交所上市&#xff0c;并于2021年9月通过聆讯&#xff0c;但最终放弃了港交所上市的打算。…

后端必备之Vue基础【黑马程序员】

黑马程序员4小时入门Vue传送门 1. 简介 Vue是一个操作JavaScript的框架&#xff0c;类似于jQuery&#xff0c;但比jQuery好用&#xff0c;是现在的主流 2. 测试例子 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /&…

LeetCode-746. 使用最小花费爬楼梯

题目来源 746. 使用最小花费爬楼梯 动态规划 动态规划五部曲 1.确定dp数组以及下标的含义 使用动态规划&#xff0c;就要有一个数组来记录状态&#xff0c;本题只需要一个一维数组dp[i]就可以了。 dp[i]的定义&#xff1a;到达第i台阶所花费的最少体力为dp[i]。 2.确定递推…

The simplest way to get started with Stable Diffusion on Ubuntu

link1 link2 Stable Diffusion is a machine learning model that can generate images from natural language descriptions. Because it’s open source, it’s also easy to run it locally, which makes it very convenient to experiment with in your own time. The sim…

万字长文漫谈高可用高并发技术

互联网应用通常面向海量用户&#xff0c;其后台系统必须支撑高并发请求。在后端开发面试中&#xff0c;高并发技术也是一个常见的考察点。 那么&#xff0c;高并发系统通常是怎么设计的呢&#xff1f;需要采用哪些技术呢&#xff1f;本文就简单聊一聊高并发背后的各种技术栈。…

蓝桥杯任意刷

这里写目录标题受伤的皇后全球变暖&#xff08;最大联通子集&#xff0c;一趟递归记得不要嵌套计数&#xff09;游园问题金额查错蓝肽子序列&#xff08;最长公共子序列&#xff09;受伤的皇后 #include <iostream> #include <bits/stdc.h> using namespace std; …

运动带什么蓝牙耳机好,最适合运动佩戴的蓝牙耳机分享

运动时汗如雨下&#xff01;这可如何是好&#xff0c;这时候一款运动专用的防水耳机就成为人们的最爱。现在&#xff0c;市面上的耳机种类已经多到数不胜数。价格也不一&#xff0c;到底是一分钱一分货&#xff0c;还是打着低价卖你一个小型音响。到底怎么挑才能找到一款性价比…

联邦学习(fate)从主机安装到实现联邦学习

联邦学习&#xff08;fate&#xff09;从主机安装到实现联邦学习一、单机部署1.1虚拟机配置1.2安装python1.3端口检查1.4获取安装包&#xff0c;并解压1.5安装1.6启动1.7测试1.8安装FATE-Client、FATE-Test、FATE-Flow、jupyter notebook1.8.1FATE-Client、FATE-Test1.8.2FATE-…

Newman+Jenkins实现接口自动化测试

一、是什么Newman Newman就是纽曼手机这个经典牌子&#xff0c;哈哈&#xff0c;开玩笑啦。。。别当真&#xff0c;简单地说Newman就是命令行版的Postman&#xff0c;查看官网地址。 Newman可以使用Postman导出的collection文件直接在命令行运行&#xff0c;把Postman界面化运…

【C++】stack 与 queue

stack 与 queuestackSTL 容器中 stack 的使用模拟实现 stackqueueSTL 容器中 queue 的使用模拟实现 queuestack 在数据结构中&#xff0c;我们了解到&#xff0c;stack 栈结构&#xff0c;是一种先进后出的结构&#xff0c;并且我们是使用顺序表来进行实现栈的操作的。 STL 容…

如何使用FindFunc在IDA Pro中寻找包含指定代码模式的函数代码

关于FindFunc FindFunc是一款功能强大的IDA Pro插件&#xff0c;可以帮助广大研究人员轻松查找包含了特定程序集、代码字节模式、特定命名、字符串或符合其他各种约束条件的代码函数。简而言之&#xff0c;FindFunc的主要目的就是在二进制文件中寻找已知函数。 使用规则过滤 …

C++回顾(六)—— 对象动态建立

6.1 new 和 delete 用法 6.1.1 概述 在软件开发过程中&#xff0c;常常需要动态地分配和撤销内存空间&#xff0c;例如对动态链表中结点的插入与删除。在C语言中是利用库函数malloc和free来分配和撤销内存空间的。C提供了较简便而功能较强的运算符new和delete来取代malloc和f…

smart-doc Java Restful API 文档生成工具

smart-doc简介 官方地址smart-doc smart-doc 是一款同时支持 JAVA REST API 和 Apache Dubbo RPC 接口文档生成的工具&#xff0c;smart-doc 在业内率先提出基于 JAVA 泛型定义推导的理念&#xff0c; 完全基于接口源码来分析生成接口文档&#xff0c;不采用任何注解侵入到业…

vue基础学习笔记

1.v-text 设置标签的文本值&#xff0c;将标签内的内容完全替换为v-text绑定的值。 如果想要保留标签内的值&#xff0c;可以采用差值表达式的方式&#xff08;<h2>text{{message}}</h2>&#xff09; 内部值支持拼接 <!DOCTYPE html> <html lang"en…