您的位置:首页 > 其它

LeetCode Best Time to Buy and Sell Stock III(dp)

2016-01-23 21:40 441 查看
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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: