描述
Say you have an array for which the i-th element is the price of a given stock on day i.
If you were only permied to complete at most one transaction (ie, buy one and sell one share of the
stock), design an algorithm to find the maximum profit.
Say you have an array for which the i-th element is the price of a given stock on day i.
If you were only permied to complete at most one transaction (ie, buy one and sell one share of the
stock), design an algorithm to find the maximum profit.
#include<iostream>
#include<vector>
#include<limits>
using namespace std;
//===
int SellStock1(int a[], int n)
{
int max = 0;
for (int i = 0; i < n - 1; i++)
{
for (int j = i + 1; j < n; j++)
{
if (a[j] - a[i]>max)
max = a[j] - a[i];
}
}
return max;
}
//===
int ThreeNumMax(int a, int b, int c)
{
if (a>=b&&a >= c)
return a;
if (b >= c&&b >= a)
return b;
if (c >= a&&c >= b)
return c;
}
int SellStock2(int a[], int begin, int end)
{
if (a == NULL || begin >= end)
return 0;
int min = INT_MAX;
int max = INT_MIN;
int minindex = begin;
int maxindex = end;
for (int i = begin; i <= end; i++)
{
if (a[i]>max)
{
max = a[i]; maxindex = i;
}
if (a[i] < min)
{
min = a[i]; minindex = i;
}
}
if (maxindex > minindex)
return max - min;
else
{
int tmp1 = INT_MAX;
int tmp2 = INT_MIN;
for (int i = begin; i < maxindex - 1; i++)
if (a[i] < tmp1) tmp1 = a[i];
for (int i = minindex + 1; i <= end; i++)
if (a[i] > tmp2) tmp2 = a[i];
return ThreeNumMax(max - tmp1, tmp2 - min, SellStock2(a, maxindex + 1, minindex - 1));
}
}
//===
int SellStock3(int a[], int n)
{
int max = INT_MIN;
int min_cur = a[0];
for (int i = 1; i < n; i++)
{
if (a[i] - min_cur > max)
max = a[i] - min_cur;
if (a[i] < min_cur)
min_cur = a[i];
}
return max;
}
int main()
{
const int n = 6;
int a[n] = { 2, 4, 1, 5, 3, 4 };
int max1 = SellStock1(a, n);
int max2 = SellStock2(a, 0, n - 1);
int max3 = SellStock3(a, n);
cout << max1 << endl;
cout << max2 << endl;
cout << max3 << endl;
}