描述
Say you have an array for which the i-th 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).
#include<iostream>
#include<vector>
#include<limits>
using namespace std;
int SellStockIII(int a[], int n)
{
if (a == NULL || n <= 1)
return 0;
int *left = new int[n];
int *right = new int[n];
//===
int min = a[0];
for (int i = 0; i < n; i++)
{left[i] = 0; right[i] = 0;}
for (int i = 1; i < n; i++)
{
if (a[i] < min)
{
min = a[i];
left[i] = left[i - 1];
}
else
{
if (a[i] - min>left[i - 1])
left[i] = a[i] - min;
else
left[i] = left[i - 1];
}
}
//===
int max = a[n - 1];
for (int i = n - 2; i >= 0; i--)
{
if (a[i]>max)
{
max = a[i];
right[i] = right[i + 1];
}
else
{
if (max-a[i]>right[i+1])
right[i] = max-a[i];
else
right[i] = right[i + 1];
}
}
//===
int res = INT_MIN;
for (int i = 0; i < n; i++)
cout << left[i] << " ";
cout << endl;
for (int i = 0; i < n; i++)
cout << right[i] << " ";
cout << endl;
for (int i = 0; i < n; i++)
{
if (left[i] + right[i]>res)
res = left[i] + right[i];
}
return res;
}
int main()
{
const int n = 6;
int a[n] = { 1, 4, 2, 3, 8, 5 };
int res = SellStockIII(a, n);
cout << res << endl;
}