买卖股票的最佳时机iii

买卖股票的最好时机 iii

http://www.nowcoder.com/questionTerminal/03905f7b819241398b02ee39bef3e8f1

利用两个dp数组

  • dp1[i]表示以第i个元素结尾的子串的最大收益
  • dp2[i]表示以第i个元素开始的子串的最大收益

代码如下:

//
// Created by jt on 2020/9/24.
//
#include <vector>
using namespace std;

class Solution {
public:
    /**
     *
     * @param prices int整型vector
     * @return int整型
     */
    int maxProfit(vector<int>& prices) {
        // write code here
        vector<int> dp1(prices.size(), 0);
        vector<int> dp2(prices.size(), 0);
        int currentMin = prices[0];
        for (int i = 1; i < prices.size(); ++i) {
            if (prices[i] < currentMin) currentMin = prices[i];
            else dp1[i] = max(dp1[i-1], prices[i] - currentMin);
        }
        int currentMax = prices[prices.size()-1];
        for (int i = prices.size()-2; i >= 0; --i) {
            if (prices[i] > currentMax) currentMax = prices[i];
            else dp2[i] = max(dp2[i+1], currentMax - prices[i]);
        }
        int res = 0;
        for (int i = 0; i < dp1.size(); ++i) {
            res = max(res, dp1[i]+dp2[i]);
        }
        return res;
    }
};
刷遍天下无敌手 文章被收录于专栏

秋招刷题历程

全部评论
牛客网的测试用例不全,这个代码有点问题的。
点赞
送花
回复
分享
发布于 2022-09-03 23:26 浙江

相关推荐

3 收藏 评论
分享
牛客网
牛客企业服务