给定一个数组,他的第i个元素是给定股票第i天的价格
设计一个算法来计算你能获得的最大的利润,可以尽可能的完成多次交易,但是
不可以同时参与多笔交易。必须在再次购买之前卖掉手里的股票。
int Get_Max_Money(const vector<int> &vec)
{
int n = vec.size();
int max = 0;
for(int i = 1;i < n;++i)
{
if(vec[i] > vec[i-1])
{
max += (vec[i] - vec[i-1]);
}
}
return max;
}
只能交易一次
int get_max_money(const vector<int> &vec)
{
int n = vec.size();
int min = INT_MAX;
int max = 0;
for(int i = 0;i < n;++i)
{
if(vec[i] < min)
{
min = vec[i];
}
else if(vec[i] - min > max)
{
max = vec[i] - min;
}
}
return max;
}
两次:
int Two_Buy(const vector<int> &vec)
{
int n = vec.size();
int dp_i10 = 0, dp_i11 = -32768;
int dp_i20 = 0, dp_i21 = -32768;
for (int i=0;i<n;i++) {
dp_i20 = max(dp_i20, dp_i21 + vec[i]);
dp_i21 = max(dp_i21, dp_i10 - vec[i]);
dp_i10 = max(dp_i10, dp_i11 + vec[i]);
dp_i11 = max(dp_i11, -vec[i]);
}
return dp_i20;
}