Best Time to Buy and Sell Stock III
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) {
int n = prices.length;
if(n<2) return 0;
//first transaction's max profit
int[] fmp = new int[n];
fmp[0] = 0;
int minPrice = prices[0];
for(int i=1; i<n; i++){
minPrice = Math.min(minPrice, prices[i]);
fmp[i] = Math.max(fmp[i-1], prices[i]-minPrice);
}
//second transaction's max profit
int[] smp = new int[n];
smp[n-1] = 0;
int maxPrice = prices[n-1];
for(int i=n-2; i>=0; i--){
maxPrice = Math.max(maxPrice, prices[i]);
smp[i] = Math.max(smp[i+1], maxPrice-prices[i]);
}
int profix = 0;
for(int i=0; i<n; i++){
profix = Math.max(profix, fmp[i]+smp[i]);
}
return profix;
}
}
public class Solution {
public int maxProfit(int[] prices) {
int n = prices.length;
if(n<2) return 0;
//first transaction's max profit
int[] fmp = new int[n];
fmp[0] = 0;
int minPrice = prices[0];
for(int i=1; i<n; i++){
minPrice = Math.min(minPrice, prices[i]);
fmp[i] = Math.max(fmp[i-1], prices[i]-minPrice);
}
//second transaction's max profit
int[] smp = new int[n];
smp[n-1] = 0;
int maxPrice = prices[n-1];
for(int i=n-2; i>=0; i--){
maxPrice = Math.max(maxPrice, prices[i]);
smp[i] = Math.max(smp[i+1], maxPrice-prices[i]);
}
int profix = 0;
for(int i=0; i<n; i++){
profix = Math.max(profix, fmp[i]+smp[i]);
}
return profix;
}
}