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).
» Solve this problemYou may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).
Idea: The best choice could be the max of: do nothing / one more transaction based on the previous result on day j where j < i and at most one transaction was made before day j
class Solution {
public:
int maxProfit(vector &prices) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int n = prices.size();
if (n <= 1) return 0;
int minp = prices[0];
int *dp = new int[n];
int *dp1 = new int[n]; //max profit with one or less transaction
memset(dp, 0, n*sizeof(int));
memset(dp1, 0, n*sizeof(int));
for (int i = 1; i < n; i++) {
if (prices[i] < minp) minp = prices[i];
dp1[i] = max(dp1[i-1], prices[i] - minp);
if (prices[i] <= prices[i-1]) {
dp[i] = dp[i-1];
continue;
}
for (int j = 0; j < i; j++) {
dp[i] = max(dp[i], dp1[j] + prices[i] - prices[j]);
}
dp[i] = max(dp[i], dp[i-1]);
}
return dp[n-1];
}
};
No comments:
Post a Comment