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).
思路: 对于prices数组中每一个数,可以求出它左边交易一次的最大收益,和它右边交易一次的最大收益,分别放在两个list集合中,最大的收益就是左右两边的收益之和。
public class Solution {
public int maxProfit(int[] prices) {
int n = prices.length;
if (n <= 0)
return 0;
List<Integer> ls1=new ArrayList<Integer>();
List<Integer> ls2=new ArrayList<Integer>();
int min=prices[0];
int max=prices[n-1];
int global=0;
ls1.add(0);
for(int i=1;i<n;i++)
{
if(prices[i]<min)
{
min=prices[i];
}
global=global > (prices[i]-min) ? global : (prices[i]-min) ;
ls1.add(global);
}
ls2.add(0);
global=0;
for(int i=n-2;i>=0;i--)
{
if(prices[i]>max) max=prices[i];
global =global > max-prices[i] ? global : max-prices[i] ;
ls2.add(global);
}
int res=0;
for(int i=0;i<n;i++)
{
res = res > ls1.get(i)+ ls2.get(n-1-i) ? res : ls1.get(i)+ ls2.get(n-1-i) ;
}
return res;
}
}