day51 --动态规划10

  •  121. 买卖股票的最佳时机 
  •  122.买卖股票的最佳时机II 

第一题:买卖股票的最佳时机

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

  • 示例 1:

  • 输入:[7,1,5,3,6,4]

  • 输出:5

0、贪心的算法思路是求得局部最优,然后求得全局最优,

1、动态规划的思路是用一个二维dp数组,一维dp[i][0]表示第i天持有股票所得最多现金

另一维dp[i][1]表示第i天不持有股票所得最多现金。

(1)确定dp数组及其下标含义

dp[i][0]:  表示第i天持有股票所得最多现金,可正可负

dp[i][1]:  表示第i天不持有股票所得最多现金

(2)确定递推公式

首先dp[i][0]可以由两个状态求出来

要么是今天没买,保持昨天的状态,也就是dp[i-1][0]

要么是今天买了,所得现金就是买入今天股票后所得现金即:-prices[i]

所以dp[i][0]=max(dp[i-1][0],-prices[i]);

对于dp[i][1]也可以由两个状态求出来

要么是前一天就卖出去了,今天就维持现状,所持现金就没变:dp[i-1][1]

要么是今天正好卖出,所得现金就是今天的价格卖出的所得现金:prices[i]+dp[i-1][0]

同样dp[i][1]取最大的,dp[i][1]=max(dp[i-1][1],prices[i]+dp[i-1][0]);

(3)dp数组如何初始化

根据递推公式,两者都是从dp[0][0]和dp[0][1]开始推导出来,所以,dp[0][0]-=prices[0]

表示第0天不持有股票,所以现金是0,dp[0][1]=0;

(4)确定遍历顺序

dp[i]都是由dp[i-1]推出来的,所以一定是从前向后遍历

(5)举例推导数组

根据prices=[7,1,5,3,6,4]可得

dp[0][0]=-7; dp[0][1]=0

dp[1][0]=-1; dp[1][1]=max(0,-6)=0

dp[2][0]=-1; dp[2][1]=max(0,4)=4

dp[3][0]=-1; dp[3][1]=max(4,2)=4

dp[4][0]=-1; dp[4][1]=max(4,5)=5

dp[5][0]=-1; dp[5][1]=max(5,3)=5

本题有多种方法可解决,动态规划比较难构思,第二题不做学习

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

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

相关文章

员工福利平台设计方案

需求背景: 1、杭州行政希望给员工有一个福利平台,可以通过该福利平台,一方面可以结合公司周围的实体店,给到员工一些福利的商品,员工可以自行去这些商家进行消费。 2、公司可以通过福利平台,给员工账户进…

K8s 部署 CNI 网络组件+k8s 多master集群部署+负载均衡

------------------------------ 部署 CNI 网络组件 ------------------------------ ---------- 部署 flannel ---------- K8S 中 Pod 网络通信: ●Pod 内容器与容器之间的通信 在同一个 Pod 内的容器(Pod 内的容器是不会跨宿主机的)共享同一…

实验六:DHCP、DNS、Apache、FTP服务器的安装和配置

1. (其它) 掌握Linux下DHCP、DNS、Apache、FTP服务器的安装和配置,在Linux服务器上部署JavaWeb应用 完成单元八的实训内容。 1、安装 JDK 2、安装 MySQL 3、部署JavaWeb应用 安装jdk 教程连接:linux安装jdk8详细步骤-CSDN博客 Jdk来源:linu…

数仓经典面试题

1.什么是数据仓库?请谈谈你对数据仓库的理解。 数据仓库是一个用于存储和管理数据的系统,它可以将分散的、异构的数据源中的数据进行抽取、转换、清洗和整合,然后按照一定的模型和架构进行组织和存储,以便更好地支持决策分析和业…

【Django 05】Django-DRF(ModelViewSet)、路由组件、自定义函数

1. Django-DRF(ModelViewSet) 1.1 DRF是什么? ModelViewSet 是 Django REST framework 提供的一个视图集类,它封装了常见的模型操作方法。 模型类提供了默认的增删改查功能。 它继承自 GenericViewSet、ListModelMixin、Retri…

基于pyenv和virtualenv搭建python多版本虚拟环境

pyenv简介 由于Python的依赖是基于site的,这对于生产环境来说,是一种简单而正确的方式,然而,对于我们的开发环境,基于这样的管理方式,带来了可怕的第三方依赖管理的难题,virtualenv适时出现了&a…

微信小程序:单行输入和多行输入组件

微信小程序提供了两种输入类型的输入框组件&#xff0c;分别是单行输入框 <input> 和多行输入框 <textarea>。 1. 单行输入组件&#xff08;input&#xff09; 单行输入框 <input> <input> 是一个用于收集用户输入的组件&#xff0c;主要用于收集单行…

Altium Designer布局技巧

资料 快捷键 PCB导入原理图 验证工程 导入原理图 进入PCB编辑界面&#xff0c;设计→Import Changes from xxxx 多原理图多PCB 创建多个原理图、PCB 略反键点击原理图 勾选高级 选择原理图及目标PCB&#xff0c;点击确定 右键点击列表项&#xff0c;更新原理图&#xff0…

手机桌面待办事项APP推荐

每天&#xff0c;我们每个人都面临着繁琐的事务和任务&#xff0c;而手机成了我们日常生活中不可或缺的伙伴。手机上的待办事项工具像一个可靠的助手&#xff0c;可以帮助我们更好地记录、管理和完成任务。在手机桌面上使用的待办事项APP推荐用哪一个呢&#xff1f; 手机是我们…

服务容错框架Sentinel入门

概述 Sentinel&#xff0c;阿里开源的一套用于服务容错的综合性解决方案。它以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。分布式系统的流量防卫兵。 特征: 丰富的应用场景&#xff1a;秒杀&#xff08;即突发流量控制在系统…

更加轻松处理相同文件名!覆盖复制操作全新升级,避免重复命名!

亲爱的用户&#xff0c;您是否在进行覆盖复制操作时&#xff0c;常常因为相同的文件名而无法正常完成任务&#xff1f;现在&#xff0c;我们为您推出了全新的覆盖复制升级版&#xff0c;让您更加轻松处理相同文件名&#xff0c;避免重复命名的尴尬局面&#xff01; 首先第一步…

el-date-picker如何回显

后端传输过来起止时间&#xff0c;需要回显在 el-date-picker中 未修改前的代码&#xff1a; 问题整改&#xff1a;需要将时间转换为Date类型 修改后的代码 setTime(date){if (date!null){this.value.push(new Date(date.startTime))this.value.push(new Date(date.endTime))c…

环境编程代码实例:“加/卸载” Zend Framework 2

文章目录 前言代码仓库需求介绍代码说明文件结构核心片段 拓展总结参考资料作者的话 前言 环境编程代码实例&#xff1a;“加/卸载” Zend Framework 2。 代码仓库 yezhening/Environment-and-network-programming-examples: 环境和网络编程实例 (github.com)Environment-and…

【开题报告】基于SpringBoot的校园周边攻略平台的设计与实现

1.选题背景 随着大学生活的日益丰富多彩&#xff0c;校园周边的商业和文化活动也越来越丰富。然而&#xff0c;对于新生或者外地来的同学来说&#xff0c;熟悉和了解校园周边的各种信息是一件比较困难的事情。因此&#xff0c;本项目旨在开发一个校园周边攻略平台&#xff0c;…

git drop掉的commit如何找回

在 Git 中&#xff0c;如果你执行了 git reset 或 git commit --amend 等操作&#xff0c;可能会导致某些 commit 被 "drop"&#xff0c;也就是不再直接可见。这些 commit 通常会被 Git 的垃圾收集机制&#xff08;garbage collection&#xff09;删除&#xff0c;但…

C++智能指针[下](shared_ptr/weak_ptr/循环引用/删除器)

文章目录 4.智能指针[shared_ptr]4.1设计理念成员属性 4.2主要接口拷贝构造 4.3引用计数线程安全问题测试线程安全通过对计数引用的加锁保护使得类线程安全类实例化的对象使用时需要手动加锁保护 "锁"的引进线程引用传参问题 4.4整体代码 5.循环引用问题5.1问题的引入…

【adb】adb相关命令行及adb传输文件权限问题 remote couldn‘t create file: Read-only file system

adb传输文件权限问题 今天用adb push的时候&#xff0c;报错说并非root权限 remote couldnt create file: Read-only file system 以下是adb相关命令一、非root权限解决方案 1️⃣运行以下命令行 adb root adb remount2️⃣如果还报错&#xff0c;则运行以下命令行 adb disab…

项目管理中,如何建立里程碑式管理?

项目进度控制是项目管理中的重要环节&#xff0c;也是最具挑战性的工作之一。在项目管理中&#xff0c;项目进度失控受到多种因素的影响&#xff0c;导致项目失控。 为了解决这个问题&#xff0c;我们可以借鉴在旅途中学到的经验&#xff0c;通过设立里程碑来了解项目进度&am…

MSQL系列(九) Mysql实战-Join算法底层原理

Mysql实战-Join算法底层原理 前面我们讲解了BTree的索引结构&#xff0c;及Mysql的存储引擎MyISAM和InnoDB,今天我们来详细讲解下Mysql的查询连接Join的算法原理 文章目录 Mysql实战-Join算法底层原理1.Simple Nested-Loop Join 简单嵌套循环2.Block Nested-Loop Join 块嵌套…

CDN技术(1)

1. CDN简介 CDN 是构建在数据网络上的一种分布式的内容分发网。 CDN 的作用是采用流媒体服务器集群技术&#xff0c;克服单机系统输出带宽及并发能力不足的缺点&#xff0c;可极大提升系统支持的并发流数目&#xff0c;减少或避免单点失效带来的不良影响。 2. CDN作用 CDN 利…