LeetCode 123. Best Time to Buy and Sell Stock III(动态规划)

LeetCode 123. Best Time to Buy and Sell Stock III(动态规划)

  • LeetCode 123 Best Time to Buy and Sell Stock III动态规划
    • 问题描述
    • 解题思路
    • 参考代码

  • By Scarb
  • Scarb’s Blog

Tags:
- Array
- Dynamic Programming

问题描述

Say you have an array for which the ith element is the price of a given stock on day i.

Design an algorithm to find the maximum profit. You may complete at most two transactions.

Note:
You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).

解题思路

题意是给你一组股票价格数组,进行两次买进卖出,问可能的最大获利是多少。
遍历这个数组,设每次的股价为i。
第二次卖掉后的钱 = max(第二次卖掉后的钱, 第二次买进后的钱 + i)
第二次买进后的钱 = max(第二次买进后的钱, 第一次卖掉后的钱 - i)
第一次卖掉后的钱 = max(第一次卖掉后的钱, 第一次买进后的钱 + i)
第一次买进后的钱 = max(第一次买进后的钱, -i)
最后得到一个最大的第二次卖掉后的钱就是最大获利

参考代码

#include 
#include 
#include     /* for max */
using namespace std;

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int buy1 = INT_MIN, sell1 = 0;
        int buy2 = INT_MIN, sell2 = 0;
        for (int i : prices)
        {
            sell2 = max(sell2, buy2 + i);
            buy2 = max(buy2, sell1 - i);
            sell1 = max(sell1, buy1 + i);
            buy1 = max(buy1, -i);
        }
        return sell2;
    }
};

int main()
{
    vector<int> prices = { 3, 8, 5, 1, 7, 8 };
    auto sl = new Solution();
    cout << sl->maxProfit(prices) << endl;

    system("pause");
    return 0;
}

你可能感兴趣的:(LeetCode)