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.
c++版本代码:
class Solution {
public:
int maxProfit(vector<int> &prices) {
int profit = 0, n = prices.size();
if( n==0 ) {
return 0;
}
int l[n], r[n];
memset(l, 0, sizeof(int)*n);
memset(r, 0, sizeof(int)*n);
int min = prices[0];
for(int i=1; i<n; i++) {
l[i] = prices[i] - min > l[i-1] ? prices[i] - min : l[i-1];
min = prices[i] < min ? prices[i] : min;
}
int max = prices[n-1];
for(int i=n-2; i>=0; i--) {
r[i] = max - prices[i] > r[i+1] ? max - prices[i] : r[i+1];
max = prices[i] > max ? prices[i] : max;
}
for (int i=0; i<n ;i++) {
profit = l[i] + r[i] > profit ? l[i] + r[i] : profit;
}
return profit;
}
};
Java版本代码:
public class Solution {
public int maxProfit(int[] prices) {
if(prices == null || prices.length == 0) {
return 0;
}
int n = prices.length;
int[] left = new int[n];
int[] right = new int[n];
int min = prices[0];
for(int i=1; i<n; i++) {
left[i] = left[i - 1] > prices[i] - min ? left[i - 1] : prices[i] - min;
min = min < prices[i] ? min : prices[i];
}
int max = prices[n-1];
for(int i=n-2; i>0; i--) {
right[i] = right[i + 1] > max - prices[i] ? right[i + 1] : max - prices[i];
max = max > prices[i] ? max : prices[i];
}
int profit = 0;
for(int i=0; i<n; i++) {
profit = profit > left[i] + right[i] ? profit : left[i] + right[i];
}
return profit;
}
}
Best Time to Buy and Sell Stock III
原文:http://www.cnblogs.com/zlz-ling/p/4052873.html