题目:
Say you have an array for which the i th 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之前和之后的最大利润pre[i],post[i]
,
再以i为分割求出两次交易的最大利润(在i处可能卖出再买入,相当于就一次交易)
代码:
public class Solution { public int maxProfit(int[] prices) { if(prices==null||prices.length<2) return 0; int[]pre=new int[prices.length]; int []post=new int[prices.length]; int min=prices[0]; for(int i=1;i<prices.length;i++){ min=Math.min(min,prices[i]); pre[i]=Math.max(pre[i-1],prices[i]-min); } int max=prices[prices.length-1]; for(int i=prices.length-2;i>=0;i--){ max=Math.max(max,prices[i]); post[i]=Math.max(post[i+1],max-prices[i]); } int maxProfit=0; for(int i=0;i<prices.length;i++){ maxProfit=Math.max(maxProfit,pre[i]+post[i]); } return maxProfit; } }