首页 > 其他分享 >第九章 动态规划Part9

第九章 动态规划Part9

时间:2024-08-27 11:49:12浏览次数:3  
标签:第九章 股票 len int max prices Part9 动态 dp

目录

任务

188. 买卖股票的最佳时机 IV

给你一个整数数组 prices 和一个整数 k ,其中 prices[i] 是某支给定的股票在第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。也就是说,你最多可以买 k 次,卖 k 次。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

思路

实际上是至多交易两次的通用版本,至多交易k次。引入循环变量j,类比123.买卖股票的最佳时机III,关注奇数和偶数时的买入卖出逻辑即可。

class Solution:
    def maxProfit(self, k: int, prices: List[int]) -> int:
        dp = [[0] *(2*k + 1) for _ in range(len(prices))]
            
        j = 1
        while j < 2*k:
            dp[0][j] = -prices[0]
            j+=2
        
        for i in range(1,len(prices)):
            for j in range(1,2*k+1):
                if j % 2 != 0: # 奇数,持有
                    dp[i][j] = max(dp[i-1][j-1]-prices[i],dp[i-1][j])
                else: #偶数,不持有
                    dp[i][j] = max(dp[i-1][j-1]+prices[i],dp[i-1][j])
        return dp[len(prices)-1][2*k]

309. 买卖股票的最佳时机含冷冻期

给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。​

设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):

卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

思路

类比122.买卖股票的最佳时机II,这个是多次交易不含冷冻期,含有冷冻期只是在推导dp[i][0]的当天买入的情况有点差别,对于含冷冻期,当天买入说明昨天一定是冷冻期或者未操作,而前天一定是未持有状态,这是与不含冷冻期的差别。另外注意因为有i-2,所以初始化时需要多初始化一行dp[1][0]和dp[1][1]

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        # dp[i][0] 表示第i天持有股票获得的最大现金 (持有:包含当天买入和之前买入)
        # dp[i][1] 表示第i天不持有股票获得的最大现金(不持有:包含当天卖出和之前卖出)
        if len(prices) < 2: return 0
        dp = [[0] * 2 for _ in range(len(prices))]
        dp[0][0] =-prices[0]
        dp[0][1] = 0
        dp[1][0] = max(-prices[0],-prices[1])
        dp[1][1] = max(0,prices[1]-prices[0])
        for i in range(1,len(prices)):
            dp[i][0] = max(dp[i-2][1]-prices[i],dp[i-1][0]) #如果当天买入,则看前天的状态(前天一定不持股)
            dp[i][1] = max(prices[i]+dp[i-1][0],dp[i-1][1])
        return dp[len(prices)-1][1]

714. 买卖股票的最佳时机含手续费

给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 ;整数 fee 代表了交易股票的手续费用。

你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。

返回获得利润的最大值。

注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。

思路

类比122.买卖股票的最佳时机II,只是当太难卖出时多了一笔手续费,减去即可。

class Solution:
    def maxProfit(self, prices: List[int], fee: int) -> int:
        # dp[i][0] 表示第i天持有股票获得的最大现金 (持有:包含当天买入和之前买入)
        # dp[i][1] 表示第i天不持有股票获得的最大现金(不持有:包含当天卖出和之前卖出)
        dp = [[0] * 2 for _ in range(len(prices))]
        dp[0][0] =-prices[0]
        dp[0][1] = 0
        for i in range(1,len(prices)):
            dp[i][0] = max(dp[i-1][1]-prices[i],dp[i-1][0])
            dp[i][1] = max(prices[i]+dp[i-1][0]-fee,dp[i-1][1])
        return dp[len(prices)-1][1]

标签:第九章,股票,len,int,max,prices,Part9,动态,dp
From: https://www.cnblogs.com/haohaoscnblogs/p/18382389

相关文章

  • avue-crud 新增弹窗里根据select的内容动态控制显隐其它字段
    @change="handleChange"<avue-crud:option="option":table-loading="loading":data="data"ref="crud":cell-style="{padding:'0'......
  • CVPR2024满分论文:基于可变形三维高斯的高质量单目动态重建方法
    一、摘要    隐式神经表征为动态场景的重建和渲染开辟了新的途径。然而,尖端的动态神经渲染方法严重依赖这些隐式表征,它们常常难以捕捉场景中物体的复杂细节。此外,隐式方法通常难以实现动态场景的实时渲染,限制了它们在多种任务中的应用。为了解决这些问题,我们提出了一......
  • LNMT动态⽹站
    LNMT动态⽹站Nginx+TomcatTomcat默认监听在8080端⼝Tomcat依赖于java0.环境准备系统服务地址CentOS7.9NginxProxy192.168.1.170CentOS7.9Tomcat动态服务器192.168.1.1521.安装jdk链接:https://pan.baidu.com/s/1rBd5lAIn0Cn-JrgJDy00IQ?pwd=9......
  • LNMP动态⽹站
    LNMP动态⽹站安装LNMP架构yum安装nginx1.24.0php7.2Mriadb5.71.安装Nginx//1.使⽤Nginx官⽅提供的rpm包[root@nginx~]#cat/etc/yum.repos.d/nginx.repo[nginx]name=nginxrepobaseurl=http://nginx.org/packages/centos/7/$basearch/gpgcheck=0enabled=1//2.......
  • 动态dp——P8820 [CSP-S 2022] 数据传输 题解
    P8820[CSP-S2022]数据传输可怜的cnblog被(昨天DDos+今天CC)攻击了(望周知!),只好先发在CSDN题面:题目描述小C正在设计计算机网络中的路由系统。测试用的网络总共有nn......
  • Request processing failed:MyBatisSystemException 黑马web开发课程P152中可能出现的
    该异常的最后一句,通过翻译,大概是:   [dispatcherServlet]:servlet.service()forservlet[dispatcherServlet]在路径[]的上下文中抛出异常[请求处理失败:MyBatisSystemException]    经过对代码的检查,发现controller,sevice,dao层业务逻辑都没有问题dao层的map......
  • java在项目中实现个性化定制的数据可视化图表———静态,动态获取数据
    一、Echarts介绍ECharts是一款基于JavaScript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。ECharts最初由百度团队开源,并于2018年初捐赠给Apache基金会,成为ASF孵化级项目。2021年1月26日晚,Apache基金会官方宣布ECharts项目正式毕业。1月28日,EChar......
  • 在 C/C++ 中使用 MY_API 宏封装动态库:一种高效的跨平台接口实现方法
    目录1.背景介绍2.MY_API宏的定义3.使用MY_API宏封装动态库4.编译和使用动态库5.结论在现代软件开发中,封装动态库(DynamicLinkLibrary,DLL)以提供可复用的功能模块已经成为一种常见的实践。然而,在开发跨平台库时,由于不同操作系统对于动态库的导出和导入机制有......
  • 如何编译FFTW3库:静态库与动态库的编译指南
    目录1.下载并解压FFTW3库2.配置编译选项3.编译并安装库4.验证编译结果5.在项目中使用FFTW3库6.总结FFTW3(FastestFourierTransformintheWest)是一个广泛使用的高性能傅里叶变换库。它支持多种优化,适用于多线程计算和SIMD指令,是处理大规模数据傅里叶变换的理......
  • Vue动态路径参数
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title><......