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

买卖股票的最佳时机三

时间:2023-01-13 13:33:13浏览次数:38  
标签:买卖 股票 买入 最佳时机 max prices 操作 dp size

image

导读 ^ _ ^

买卖股票的系列问题三!
这回的限制是全局最多能买卖两次操作。

题目

leetcode 123
image.png

代码与思路

注意:这里的2次是最多两次

确定dp数组以及下标的含义

dp[i][j]中 i表示第i天,j为 [0 - 4] 五个状态,dp[i][j]表示第i天状态j所剩最大现金。

  1. 没有操作
  2. 第一次买入
  3. 第一次卖出
  4. 第二次买入
  5. 第二次卖出

递归公式

dp[i][1]状态,有两个具体操作:

  • 操作一:第i天买入股票了,那么dp[i][1] = dp[i-1][0] - prices[i]
  • 操作二:第i天没有操作,而是沿用前一天买入的状态,即:dp[i][1] = dp[i - 1][1]

dp[i][2]也有两个操作:

  • 操作一:第i天卖出股票了,那么dp[i][2] = dp[i - 1][1] + prices[i]
  • 操作二:第i天没有操作,沿用前一天卖出股票的状态,即:dp[i][2] = dp[i - 1][2]

同理可推出剩下状态部分:
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]);
image.png

//买卖股票最佳时机III
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        if (prices.size() == 0) return 0;
        vector<vector<int>> dp(prices.size(), vector<int>(5, 0));
        dp[0][1] = -prices[0];
        dp[0][3] = -prices[0];//相当于第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];//铁定是第二次卖出利润最大啊
        //如果最优的情况对应的是恰好一笔交易
        //那么它也会因为我们在转移时允许在同一天买入并且卖出这一宽松的条件
        //从状态1迁移到2
    }
};

#谢谢你的观看!

^ _ ^

标签:买卖,股票,买入,最佳时机,max,prices,操作,dp,size
From: https://www.cnblogs.com/HX-Note/p/17049359.html

相关文章

  • leetcode_数据结构_入门_121. 买卖股票的最佳时机
    121.买卖股票的最佳时机  问题:给定一个数组prices,它的第 i个元素 prices[i]表示一支给定股票第i天的价格。只能选择某一天买入这只股票,并选择在未来的某......
  • 买卖股票的最佳时机二
    导读^_^买股票的系列问题二!这次股票的限制是每天最多只能持有一支股票,可以多次进行买卖操作,最大化利益。题目leetcode122代码与思路dp数组的含义:dp[i][0]表......
  • LeetCode刷题(41)~买卖股票的最佳时机
    题目描述给定一个数组,它的第i个元素是一支给定股票第i天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意......
  • 买卖股票的最佳时机
    导读^_^开更买股票的系列问题咯!这次股票的限制是买卖只能一次,求最大化利益。题目leetcode121代码与思路贪心思路因为股票就买卖一次,那么贪心的想法很自然就是......
  • 【动态规划】股票买卖问题
    目录股票买卖问题简介应用应用1:Leetcode.121题目分析边界条件状态转移代码实现应用2:Leetcode.122题目分析边界条件状态转移代码实现应用3:Leetcode.123题目分析边界条件状态......
  • 122. 买卖股票的最佳时机II
    问题链接https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/解题思路买卖股票,本质上就是低价买入,高价卖出。我们可以用模拟法,不断的去找到......
  • R语言ARIMA-GARCH波动率模型预测股票市场苹果公司日收益率时间序列|附代码数据
    原文链接:http://tecdat.cn/?p=23934最近我们被客户要求撰写关于ARIMA-GARCH的研究报告,包括一些图形和统计输出。在本文中,我们将尝试为苹果公司的日收益率寻找一个合适的......
  • 股票和公司盈利的三种方式类比
    最近看了刘润的《底层逻辑2》讲到了公司盈利的三种方式:能力,速度、倍数;这三种方式和股票竟然有异曲同工之妙;原来世间万物的之间的原理都是通的。​能力,公司盈利的第一种方......
  • 道长的算法笔记:状态机模型之股票系列问题
    (一)股票系列问题所谓的股票问题,是一个动态规划状态机模型的系列问题,这些题目来自于LeetCode社区,这些问题非常经典,能够帮助我们理解动态规划的本质,这些问题大多初看之......
  • Python爬取往期股票数据,分析中奖规律!
    快过年了,手头有点紧,但是作为一个男人,身上怎么能够没有大把钞票呢?于是我决定用Python来分析一波股票,赢了会所嫩*,输了下海干活!好了,上面是我吹牛逼的,不过确实有小伙......