动态规划--股市买入卖出时间点选择问题

题目:

给你一个股价序列,告诉你每个时间点的股价,问你什么时候买什么时候卖获利最大。时间复杂度越低越好。

int max_difference(const vector<int>& arr)
{
    if (arr.size()>=2)
    {
        int MIN=min(arr[0],arr[1]);
        int MAX_DIFFERENCE=arr[1]-arr[0];//第一个被求出的差值,暂时作为最大的差值
        for (vector<int>::size_type i=2;i<arr.size();i++)
        {
            if (arr[i]-MIN>MAX_DIFFERENCE)
            {
                MAX_DIFFERENCE=arr[i]-MIN;
            }
            if (arr[i]<MIN)
            {
                MIN=arr[i];//影响新的差值的关键在于已经找到的当前的最小元素是谁,只要将当前值减去这个最小元素就能更新MAX_DIFFERENCE
            }
        }
        return MAX_DIFFERENCE;
    }
    else
    {
        cout<<"size of arr is too small";
        return 0;
    }
    
}
void give_result(int a[],int n)
{
    vector<int> arr(a,a+n);
    print(arr.begin(),arr.end());
    print(max_difference(arr));
}
int main( void ) 
{
    int a0[]={7,9,10};
    give_result(a0,3);
    int a1[]={10,9,7};
    give_result(a1,3);
    int a[]={3,10,1,9};
    give_result(a,4);
    int a2[]={3,9,2,10,1,8};
    give_result(a2,6);
    return 0;
}
原文地址:https://www.cnblogs.com/bendantuohai/p/4750682.html