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天的股价,最多只能交易两次,求最大收益
思路:动态规划。用dp1(i)表示从0到i的最小股票值。dp2(i)表示从i到n的最大股票值。在求最大收益值时,将第一次收益的最大值加上第二次收益的最大值相加即可。
代码如下:
class Solution
{
public int maxProfit(int[] prices)
{
int len = prices.length;
if (0 == len) return 0;
int[] left = new int[len];
int[] right = new int[len];
left[0] = prices[0];
right[len - 1] = prices[len - 1];
for (int i = 1; i < len; i++)
{
left[i] = Math.min(left[i - 1], prices[i]);
}
for (int i = len - 2; i >= 0; i--)
{
right[i] = Math.max(right[i + 1], prices[i]);
}
int ans = 0;
int tmp = 0;
for (int i = 0; i < len; i++)
{
tmp = Math.max(tmp, prices[i] - left[i]);
ans = Math.max(ans, tmp + right[i] - prices[i]);
}
return ans;
}
}