123. 买卖股票的最佳时机 III

#include <vector>
#include <iostream>
using namespace std;
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int len=prices.size();
        int dp1[len];
        int dp2[len];
        int max=0;
        int minValue=prices[0];
        int maxValue=prices[len-1];
        //第1天到第i天之间股票最大值
        dp1[0]=0;
        //第i天到最后一天之间股票最大值
        dp2[len-1]=0;
        for (int i = 1; i < len; i++)
        {
            dp1[i]=(prices[i]-minValue)>dp1[i-1]?(prices[i]-minValue):dp1[i-1];
            if(prices[i]<minValue){
                minValue=prices[i];
            }


            dp2[len-1-i]=(maxValue-prices[len-1-i])>dp2[len-i]?(maxValue-prices[len-1-i]):dp2[len-i];
            if (prices[len-1-i]>maxValue)
            {
                maxValue=prices[len-1-i];
            }
            
        }
        //找出第1到第i天之间和第i天和最后一天之间,股票和的最大值
        for (int i = 0; i < len; i++)
        {
            if (dp1[i]+dp2[i]>max)
            {
                max=dp1[i]+dp2[i];
            }
        }
        return max;
    }
};
int main(){
    Solution s;
    vector<int> v{2,1,4,5,2,9,7};
    cout<<s.maxProfit(v);
    return 0;
}

 

posted on 2022-11-26 17:15  一仟零一夜丶  阅读(16)  评论(0)    收藏  举报