首页 > 其他分享 >188. 买卖股票的最佳时机 IV

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

时间:2023-06-08 11:00:12浏览次数:42  
标签:vector int 股票 IV 最佳时机 prices 188 股票价格 dp

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

给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格,和一个整型 k 。

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

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

示例 1:

输入:k = 2, prices = [2,4,1]
输出:2
解释:在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2 。
示例 2:

输入:k = 2, prices = [3,2,6,5,0,3]
输出:7
解释:在第 2 天 (股票价格 = 2) 的时候买入,在第 3 天 (股票价格 = 6) 的时候卖出, 这笔交易所能获得利润 = 6-2 = 4 。
随后,在第 5 天 (股票价格 = 0) 的时候买入,在第 6 天 (股票价格 = 3) 的时候卖出, 这笔交易所能获得利润 = 3-0 = 3 。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iv
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

动态规划

状态定义

dp[i][k][statue]
i表示当前天数的集合
k表示当前交易次数的最大限额(卖出代表交易完成)
statue表示当前的股票持有状态,0表示未持有,1表示持有

例如(天数从1开始计)
dp[2][2][0],表示在第二天,最大交易限额为2的情况下,未持有股票所能取得的最大利润。(最大限额为2指包含交易0,1,2的情况)

状态转移方程

dp[0][][0]=0
第一天初始资金为0,未购买股票
dp[0][][1]=-prices[0]
购买股票

dp[i][k][0]=max(dp[i-1][k][0],dp[i-1][k][1]+price[i]);
第i天未持有股票可能情况有两种:
1.第i-1天未持有股票,此时保持不变
2.第i-1天持有股票,但i天卖掉。

dp[i][k][1]=max(dp[i-1][k][1],dp[i-1][k-1][1]-price[i]);
同上,不过购买股票会进行一次新的交易。k会增加。

代码

class Solution {
public:
    int maxProfit(int k, vector<int>& prices) {
    int quota=k;
            vector<vector<vector<int>>>dp(prices.size(),vector<vector<int>>(quota+1,vector<int>(2)));
        for(int i=0;i<prices.size();i++){
            for(int k=quota;k>=1;k--){
                if(i==0){
                    dp[i][k][0]=0;
                    dp[i][k][1]=-prices[i];
                }
                else{
                    dp[i][k][0]=max(dp[i-1][k][0],dp[i-1][k][1]+prices[i]);
                    dp[i][k][1]=max(dp[i-1][k][1],dp[i-1][k-1][0]-prices[i]);
                }
            }
        }
        return dp[prices.size()-1][quota][0];
    }
};

标签:vector,int,股票,IV,最佳时机,prices,188,股票价格,dp
From: https://www.cnblogs.com/SkyDusty/p/17465582.html

相关文章

  • docker搭建hadoop和hive集群
    一、安装docker并生成相关的镜像(1)安装docker安装docker教程https://www.runoob.com/docker/centos-docker-install.html只要在终端输入:sudodockerrunhello-world后出现如下图的内容就证明安装docker成功了(2)拉取CentOS镜像(Ubuntu镜像也行)在终端输入:sudodockerpullcent......
  • Codeforces Round 876 (Div. 2) 题解 A - D
    A.TheGoodArray题目大意给定两个整数\(n\)和\(k\),规定一个\(01\)数列为好的的条件是,对于\(1\simn\)中任意的\(i\),都有:\(a\)的前\(i\)个元素中至少有\(\lceil\frac{i}k\rceil\)个都是\(1\)。\(a\)的后\(i\)个元素中至少有\(\lceil\frac{i}k\rceil\)个都是......
  • 算法学习day50动态规划part11-123、188
    packageLeetCode.DPpart11;/***123.买卖股票的最佳时机III*给定一个数组,它的第i个元素是一支给定的股票在第i天的价格.*设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。*注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。......
  • clickhouse读写数据库3-- clickhouse_driver 模块
    这是用百度的文心一言生成的代码。刚开始2次都是错误的,明确指出clickhouse_driver没有占位符,让AI重新生成。重新生成了2次之后,才得到正确代码  #!/usr/bin/envpython#-*-coding:utf-8-*-#author:henry#desc:整理clickhouse读写的范例,方便日后读写click......
  • Codeforces Round 876 (Div. 2) A-D
    比赛地址A.TheGoodArray题意:定义一个数组是good的要求有:从左往右所有的i,前i个数中至少有[i/k]个数是1从右往左所有的i,前i个数中至少有[i/k]个数是1问good数组对于n而言最少需要多少个1Solution先从左往右填1,直到满足第一个条件,然后从右往左填1,直到满足第二个条件voidso......
  • div元素自适应屏幕大小
    简单介绍一下实现方式(结尾处有代码)1.首先创建一个根元素,将这个跟元素宽高设置为100%,当然,用100vw、100vh也可以,并且将根元素设置为相对定位。2.再创建我们要实现自适应大小的元素,自适应元素我们要给固定的宽高。可以按照常见的屏幕分辨率赋值,1920*1080或者2560*1440。(注:至于为什......
  • 9、hive的explode、Lateral View侧视图、聚合函数、窗口函数、抽样函数使用详解
    ApacheHive系列文章[1、apache-hive-3.1.2简介及部署(三种部署方式-内嵌模式、本地模式和远程模式)及验证详解][2、hive相关概念详解--架构、读写文件机制、数据存储][3、hive的使用示例详解-建表、数据类型详解、内部外部表、分区表、分桶表][4、hive的使用示例详解-事务表、......
  • Vue3 之 响应式 API reactive、 effect源码,详细注释
    Vue3之响应式APIreactive、effect源码,详细注释目录一.实现响应式API:reactive、shallowReactive、readonly、shallowReadonly1.针对不同的API创建不同的响应式对象2.实现createReactiveObject3.实现不同的拦截函数baseHandlers.ts二.实现响应式effect1.创建响应式的......
  • ACM-CodeForces-#685(Div.2)
    A.SubtractorDivide#include<iostream>usingnamespacestd;intmain(){ intT,n; cin>>T; while(T--) { cin>>n; if(n<=3) n--; else n=2+(n&1); cout<<n<<endl; } return0;}B.Non-SubstringSubsequence#in......
  • Hive - 多种表类型的CURD测试
     关于torc、textfile、orc、es、hyperdrive表的CURD测试  TORC(支持事务的orc表)测试TORC(分区表)测试TEXTFILE表测试ORC表测试ES(ElasticSearch表)测试hyperdrive表测试    TORC(支持事务的orc表)测试--torc测试--=======CREATETABLEdefault.torc_test(......