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).
public class Solution { public int maxProfit(int[] prices) { /*在整个区间的每一点切开,然后分别计算左子区间和右子区间的最大值,然后再用O(n)时间找到整个区间的最大值。 看来以后碰到与2相关的问题,一定要想想能不能用二分法来做 定义两个数组left和right,数组left[i]记录了price[0..i]的最大profit,数组right[i]记录了price[i..n]的最大profit。 最后利用O(n)的时间求出Maxprofix = max(left(0,i) + right(i+1, n)) 0<=i<n*/ int len=prices.length; if(len<=0) return 0; int left[]=new int[len]; int right[]=new int[len]; left[0]=0; int minleft=prices[0]; for(int i=1;i<len;i++){ left[i]=Math.max(left[i-1],prices[i]-minleft); if(minleft>prices[i])minleft=prices[i]; } right[len-1]=0; int maxright=prices[len-1]; for(int j=len-2;j>=0;j--){ right[j]=Math.max(right[j+1],maxright-prices[j]); if(maxright<prices[j])maxright=prices[j]; } int res=0; for(int i=0;i<len;i++){ int temp=right[i]+left[i]; if(res<temp) res=temp; } return res; } }