LeetCode123. Best Time to Buy and Sell Stock III

题目描述:

假设你有一个数组,其中第i个元素是第i天给定股票的价格。
设计一个算法找到最大利润,你也许最多只能完成两次交易。

  • 请注意,不得同时进行多笔交易(即您必须在再次购买前卖出股票)

Example1

Input: [3,3,5,0,0,3,1,4]
Output: 6

Explanation
第四天买入,第六天卖出,利润是3-0=3.
然后第七天买入,第八天卖出,利润是4-1=3

Example2

Input: [1,2,3,4,5]
Output: 4

Explanation
第一天买入,第五天卖出,利润是5-1=4.
注意你不能第一天买进,第二天买进然后一起卖掉。因为你在同一时间同时进行多个交易时,必须在再次买进之前卖出

Example 3:

Input: [7,6,4,3,1]
Output: 0

Explanation
在这个例子中,没有交易做成因为最大利润是零

C++输入格式

class Solution {
public:
    int maxProfit(vector& prices) {
        
    }
};

范例

子函数
class Solution {
public:
    int maxProfit(vector &prices) 
    {
        if (prices.size() <= 1) return 0;
        else 
        {
            int K = 2; // number of max transation allowed
            int maxProf = 0;
            vector > f(K+1, vector(prices.size(), 0));
            //创建一个二维数组,行数为k+1,列数为 prices.size(),初始化全为零 
            for (int kk = 1; kk <= K; kk++) 
            {
                int tmpMax = f[kk-1][0] - prices[0];
                cout<
主函数
int main()
{
    vector vec;
    int i=0;
    int m =0;
    //int a[10]={7,6,4,3,1};
    //int a[10]={1,2,3,4,5};
    int a[10]={7,1,5,3,6,4};
    //int a[10]={7};
    //int a[10]={9,9};
    for(i=0;i<6;i++)
    {
       vec.push_back(a[i]);
    }

    vector::iterator pos;
    //声明一个迭代器,来访问vector容器。作用:遍历或指向vector容器的元素 
    cout<<"输入数组:";
    for(pos = vec.begin();pos!=vec.end();pos++)
    {
        cout<<*pos<<" ";
    } 
    cout<

测试用例

f[kk][ii]作为当前最大利润,tmpMax作为当前可获利的最大值。最后将f[kk][ii]tmpMax进行比较找出最大值,时间复杂度为O(k)符合题目要求。

你可能感兴趣的:(LeetCode123. Best Time to Buy and Sell Stock III)