首页 > 其他分享 >(50/60)买卖股票的最佳时机Ⅲ、买卖股票的最佳时机Ⅳ

(50/60)买卖股票的最佳时机Ⅲ、买卖股票的最佳时机Ⅳ

时间:2024-03-21 23:56:19浏览次数:22  
标签:买卖 int max 60 持有 最佳时机 prices dp

day50

买卖股票的最佳时机Ⅲ

leetcode:123. 买卖股票的最佳时机 III

动态规划

代码实现

/*
意义:下标为i时,不同状态收益为
dp[i][0] 未持有
dp[i][1] 第一次持有
dp[i][2] 第一次未持有
dp[i][3] 第二次持有
dp[i][4] 第二次未持有
递推:
dp[i][0] =  dp[i-1][0]; 之前未持有
dp[i][1] =  max(dp[i-1][1],dp[i-1][0] - prices[i]) 之前买、当天买
dp[i][2] =  max(dp[i-1][2],dp[i-1][1] + prices[i]) 之前第一次卖出、当天第一次卖出
dp[i][3] =  max(dp[i-1][3],dp[i-1][2] - prices[i]) 之前第二次持有、当天第二次持有
dp[i][4] =  max(dp[i-1][4],dp[i-1][3] + prices[i]) 之前第二次未持有、当天第二次未持有
初始化:
dp[0][0] = 0;
dp[0][1] = -prices[0];
dp[0][2] = 0;
dp[0][3] = -prices[0];
dp[0][4] = 0;
其余为0
遍历:
正序
*/

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        vector<vector<int>> dp(prices.size(),vector<int>(5,0));
        dp[0][0] = 0;
        dp[0][1] = -prices[0];
        dp[0][2] = 0;
        dp[0][3] = -prices[0];
        dp[0][4] = 0;
        for(int i = 1;i < prices.size();i++){
            dp[i][0] =  dp[i-1][0]; // 之前未持有
            dp[i][1] =  max(dp[i-1][1],dp[i-1][0] - prices[i]); // 之前买、当天买
            dp[i][2] =  max(dp[i-1][2],dp[i-1][1] + prices[i]); // 之前第一次卖出、当天第一次卖出
            dp[i][3] =  max(dp[i-1][3],dp[i-1][2] - prices[i]); // 之前第二次持有、当天第二次持有
            dp[i][4] =  max(dp[i-1][4],dp[i-1][3] + prices[i]); // 之前第二次未持有、当天第二次未持有
        }
        
        return dp[prices.size()-1][4];
    }
};

买卖股票的最佳时机Ⅳ

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

动态规划

思路

Ⅲ的升级版,这个也是通解(找规律)。

代码实现

class Solution {
public:
    int maxProfit(int k, vector<int>& prices) {
        vector<vector<int>> dp(prices.size(),vector<int>(2*k + 1,0));
        // init
        for(int i = 1;i < 2*k + 1;i += 2){
            dp[0][i] = -prices[0];
        }
        // traverse
        for(int i = 1;i < prices.size();i++){
            for(int j = 0;j < 2*k+1;j++){
                if(j == 0) dp[i][j] = dp[i-1][j];
                else if(j%2 == 1) dp[i][j] = max(dp[i-1][j],dp[i-1][j-1] - prices[i]);    // 奇数,购入
                else dp[i][j] = max(dp[i-1][j],dp[i-1][j-1] + prices[i]); // 偶数,卖出
            }
        }

        return dp[prices.size() - 1][2*k];
    }
};

标签:买卖,int,max,60,持有,最佳时机,prices,dp
From: https://www.cnblogs.com/tazdingo/p/18088510

相关文章

  • (48/60)买卖股票的最佳时机、买卖股票的最佳时机Ⅱ
    day48买卖股票的最佳时机leetcode:121.买卖股票的最佳时机动态规划代码实现/*意义:dp[i][0]下标为i天持有股票的最大收益;dp[i][1]下标为i天不持股的最大收益递推:之前买入、当天买入:dp[i][0]=max(dp[i-1][0],-prices[i]);之前卖出、当天卖出:dp[i][1]=max(dp[i-1][1],......
  • (47/60)打家劫舍、打家劫舍Ⅱ、打家劫舍Ⅲ
    day47打家劫舍leetcode:198.打家劫舍动态规划代码实现/*偷到下标为i的最大金额数为dp[i]偷i、不偷i:dp[i]=max(dp[i-2]+nums[i],dp[i-1]);dp[0]=nums[0];dp[1]=max(nums[0],nums[1]);正序遍历*/classSolution{public:introb(vector<int>&nums){......
  • 科技赋能生活:KTH1601让垃圾桶“懂”你的需求
    在现代社会,科技的快速发展不仅仅改变了我们的生活方式,甚至连日常生活中的垃圾桶也变得“智能”起来。高性能、低功耗霍尔开关传感器KTH1601,正是让智能垃圾桶能够自动感应、自动开关的关键所在。它是由昆泰芯微电子科技有限公司研发的一款全极磁场检测传感器,具备非常低的功耗......
  • MT2492 16V输入 600KHz 2A DCDC同步降压转换器 航天民芯一级代理
    深圳市润泽芯电子有限公司为航天民芯一级代理描述  MT2492是一款完全集成的高效率产品2A同步整流降压变换器。MT2492在一段时间内高效运行宽输出电流负载范围。该设备提供两种工作模式,即PWM控制和PFM模式切换控制在更宽的工作范围内实现高效率加载。MT2492需要最少数量的......
  • 汽车用GMR角度传感器,TLE5014P16DXUMA1、TLE5014S16DXUMA1、TLE5014SP16DE0002XUMA1(360
    TLE5014GMR角度传感器有以下型号可供选择:TLE5014C16:汽车用GMR角度传感器,带SPC接口TLE5014P16:汽车用GMR角度传感器,带PWM接口TLE5014S16:汽车用GMR角度传感器,带SENT接口概述TLE5014基于巨磁阻(GMR)的角度传感器侧重于转向角传感器,设计用于汽车应用的角度位置检测。这些传感......
  • P1960 郁闷的记者
    原题链接题解拓扑排序,层级标记,如果层级等于n,代表层次分明code#include<bits/stdc++.h>usingnamespacestd;vector<int>G[500005];intin[500005]={0};structnode{intid,layer;};intmain(){intn,m;cin>>n>>m;for(inti=1;i<=m;i++)......
  • 分享600套常用的手机网站模板,总有一款适合你
    600套手机网站模板分享:总有一款适合你!演示效果及下载地址:https://www.erdangjiade.com/templates/0-0-108-0-0-01、你先注册好一个帐号,然后私聊找我,我帮你充好积分,2、整站资源就可以直接下载了3、如果有一天,你成为技术大神,你会不会想起,那个曾经指点过你的朋友手机网站已......
  • 考研数学|跟张宇,如何用好《1000题》和《660题》?
    在基础阶段跟随张宇老师的课程学习后,进入强化阶段,究竟是先做1000题还是先做660题?其实没有绝对的答案,因为最佳的选择取决于你自身的掌握程度和学习进度。以下是一些建议,帮助你做出决定。首先,你需要对自己的数学基础进行一个客观的评估。如果你觉得自己的基础已经相当扎实,可以直......
  • 060_深度学习
    目录神经网络深度学习各层负责内容神经网络深度学习各层负责内容......
  • 蓝桥杯 2013 国 AC 网络寻路 第四届国赛 洛谷P8605
    [蓝桥杯2013国AC]网络寻路题目描述XXX国的一个网络使用若干条线路连接若干个节点。节点间的通信是双向的。某重要数据包,为了安全起见,必须恰好被转发两次到达目的地。该包可能在任意一个节点产生,我们需要知道该网络中一共有多少种不同的转发路径。源地址和目标地......