力扣121. 买卖股票的最佳时机(动态规划)

力扣121. 买卖股票的最佳时机(动态规划)

力扣121. 买卖股票的最佳时机(动态规划)_第1张图片

动态规划:

有点像0-1背包问题:

买入:

  i当天买入 i当天不买入
i当天买入的最大收益 -i当天的股价 i-1买入的最大收益,维持现状
in[i] -prices[i] in[i-1]

卖出:

  i当天卖出 i当天不卖出
i当天卖出的最大收益 i-1天买入的最大收益+i当天的股价 i-1天卖出的最大收益,维持原状
out[i] out[i-1]+prices[i] out[i-1]

i-1天买入的最大收益,这里很多人不理解,以为仅仅是前一天的价格,其实i-1天买入的最大收益已经取最大值,即i-1天买入的最大收益代表第一天到第i-1天的最佳买入点,只是没有标记哪一天,直接相加即可。

复杂度分析:

  • 时间复杂度:O(N)
  • 空间复杂度:O(N)
//
//  main.cpp
//  121maxProfit
//
//  Created by MXQ on 2020/10/21.
//

#include 
#include
using namespace::std;
class Solution {
public:
    int maxProfit(vector& prices) {
        int n=prices.size();
        if(n==0 || n==1)return 0;
        vectorin(n);
        vectorout(n);
        out[0]=0;
        in[0]=-prices[0];
        int maxoutvalue=0;
        for (int i=1; imaxoutvalue) {
                maxoutvalue=out[i];
            }
        }
        return maxoutvalue;
    }
};
int main(int argc, const char * argv[]) {
    // insert code here...
    vectorprices={7,6,4,3,1};
    Solution s;
    auto result=s.maxProfit(prices);
    std::cout << result<

 

你可能感兴趣的:(力扣刷题,动态规划,c++,数据结构)