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

来源:互联网 发布:网络互动直播新闻 编辑:程序博客网 时间:2024/06/03 13:55

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 <iostream>#include <vector>#include <algorithm>    /* 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;}
1 0