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;
}