public int maxProfit(int[] prices)
{
if(prices==null || prices.length==0)
return 0;
int len=prices.length;
int[] dp1=new int[len];
int[] dp2=new int[len];
int max=prices[len-1];
int min=prices[0];
for(int i=1;i<len;i++)
{
min=Math.min(min,prices[i]);
dp1[i]=Math.max(dp1[i-1],prices[i]-min);
}
for(int i=len-2;i>=0;i--)
{
max=Math.max(max, prices[i]);
dp2[i]=Math.max(dp2[i+1],max-prices[i]);
}
int ans=0;
for(int i=0;i<len;i++)
ans=Math.max(ans, dp1[i]+dp2[i]);
return ans;
}
转自 http://www.mitbbs.com/article_t1/JobHunting/32251173_0_1.html
非常elegent的解法
本文介绍了一种计算股票买卖最大利润的优雅算法。通过两次遍历价格数组,第一次从前向后找出每次买入后的最大利润,第二次从后向前计算卖出的最大收益,最终得到两次交易的最大总利润。
544

被折叠的 条评论
为什么被折叠?



